R 加上秒“:00“;如果缺少,则将其添加到字符串
我有一个数据集示例,我想使用lappy(或apply家族的任何其他成员)将两个变量粘贴在一起,具体条件适用 数据帧示例:R 加上秒“:00“;如果缺少,则将其添加到字符串,r,apply,lapply,R,Apply,Lapply,我有一个数据集示例,我想使用lappy(或apply家族的任何其他成员)将两个变量粘贴在一起,具体条件适用 数据帧示例: df <- data.frame(v1=c('8','5','8','8','5','8'), v2=c('20:05:20','19:20','15:37:35','12:04:21','12:45','13:08:21')) v1 v2 1 8 20:05:20 2 5 19:20 3 8 15:37:35 4 8 12:04:21
df <- data.frame(v1=c('8','5','8','8','5','8'),
v2=c('20:05:20','19:20','15:37:35','12:04:21','12:45','13:08:21'))
v1 v2
1 8 20:05:20
2 5 19:20
3 8 15:37:35
4 8 12:04:21
5 5 12:45
6 8 13:08:21
我正在寻找一种在一行代码中完成所有这些的解决方案-具体地说,我想使用lappy并添加
v2
中的值,在组合/粘贴缺少的:00
解决方案时使用替换(sub
):
使用
data.table
尝试:
dt[, v3 := ifelse(grepl(":\\d+:", v2),
format(strptime(v2, "%H:%M:%S"), "%H:%M:%S"),
format(strptime(v2, "%H:%M"), "%H:%M:%S"))]
给出:
v1 v2 v3
1: 8 20:05:20 20:05:20
2: 5 19:20 19:20:00
3: 8 15:37:35 15:37:35
4: 8 12:04:21 12:04:21
5: 5 12:45 12:45:00
6: 8 13:08:21 13:08:21
我知道这个问题有很多解决方案,但事实并非如此。我对解决方案特别感兴趣,我使用的是
apply
-es中的一个,在函数中,我引用的是在数据帧中使用另一个变量(不是x)并在所有x索引处更改另一个变量的值。我希望这是清楚的。要使用apply
只需从@PoGibas获取解决方案,并将其放在代码的函数(x)
部分之后。查看一下dplyr
和管道%%>%%
,您可以使用mutate
函数获得相同的结果。结果有很多选择。@gaspers我用apply
family solution编辑了我的答案
sapply(df$v2, function(x) sub("^([0-9]+:[0-9]+)$", "\\1:00", x))
replace(v2, lengths(gregexpr(":", v2)) == 1, paste0(v2[lengths(gregexpr(":", v2)) == 1], ":00"))
#[1] "20:05:20" "19:20:00" "15:37:35" "12:04:21" "12:45:00" "13:08:21"
dt[, v3 := ifelse(grepl(":\\d+:", v2),
format(strptime(v2, "%H:%M:%S"), "%H:%M:%S"),
format(strptime(v2, "%H:%M"), "%H:%M:%S"))]
v1 v2 v3
1: 8 20:05:20 20:05:20
2: 5 19:20 19:20:00
3: 8 15:37:35 15:37:35
4: 8 12:04:21 12:04:21
5: 5 12:45 12:45:00
6: 8 13:08:21 13:08:21