当列同时包含 hms 和 ms 时,lubridate 失败

lubridate fails when column contains both hms and ms

我正在清理数据框并尝试使用 lubridate 将列转换为 hour:minutes:seconds。该列的值只有分钟和秒的格式(例如“36:10”),有些值有小时、分钟和秒(例如“1:06:32”)。我在 lubridate 中找不到命令不会将两种情况中的一种变成 NA。

下面的例子(我添加了一行 NA 值,因为我的数据框有几个)

library(lubridate)
a <- c("36:10", "1:06:32", NA)
b <- hms(a)
b

[1] NA "1H 6M 32S" NA  

感谢任何帮助。

如果只有一个冒号,为什么不直接粘贴一个“0:”

hms(purrr::map2_chr(a, stringr::str_count(a, ":"), 
    ~dplyr::if_else(.y==1, paste0("0:", .x), .x)))

或仅使用基数 R 更短:

a <- c("36:10", "1:06:32", NA)

a2 <- ifelse(nchar(a) < 6, paste0("00:", a), a)

hms(a2)

> hms(a2)
[1] "36M 10S"   "1H 6M 32S" NA