我有时间专栏,但是还没有被:
或其他东西分隔开。看起来像这样:
person time
1 356
1 931
1 2017
1 2103
2 256
2 1031
2 1517
2 2206
如何分离它们?
最佳答案
解决问题有多种方法。选择哪种方法取决于所需的输出。
例如,您可以使用stringr::str_split
将time
分为小时和分钟的list
向量,并使用正向预见
library(tidyverse)
df %>% mutate(time = str_split(time, "(?=\\d{2}$)"))
# person time
#1 1 3, 56
#2 1 9, 31
#3 1 20, 17
#4 1 2, 13
#5 2 2, 56
#6 2 10, 31
#7 2 15, 17
#8 2 2, 26
或者我们可以使用
tidyr::separate
创建两个新列hours
和minutes
df %>% separate(time, c("hours", "minutes"), sep = "(?=\\d{2}$)")
# person hours minutes
#1 1 3 56
#2 1 9 31
#3 1 20 17
#4 1 2 13
#5 2 2 56
#6 2 10 31
#7 2 15 17
#8 2 2 26
根据您的评论,您可以使用
stringr::str_replace
df %>% mutate(time = str_replace(time, "(?=\\d{2}$)", ":"))
# person time
#1 1 3:56
#2 1 9:31
#3 1 20:17
#4 1 2:13
#5 2 2:56
#6 2 10:31
#7 2 15:17
#8 2 2:26
和使用
sub
的基本R相同transform(df, time = sub("(?=\\d{2}$)", ":", time, perl = TRUE))
给出相同的结果。
样本数据
df <- read.table(text = "
person time
1 356
1 931
1 2017
1 213
2 256
2 1031
2 1517
2 226", header = T)