R 加上秒“:00“;如果缺少,则将其添加到字符串

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

我有一个数据集示例,我想使用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
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