当列同时包含 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
我正在清理数据框并尝试使用 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