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

问题描述 投票:2回答:2

我正在清理数据框并尝试使用lubridate将列转换为小时:分钟:秒。该列的格式只有分钟和秒(例如“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  

任何帮助赞赏。

r lubridate
2个回答
3
投票

或者只用基数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 

2
投票

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

hms(purrr::map2_chr(a, stringr::str_count(a, ":"), 
    ~dplyr::if_else(.y==1, paste0("0:", .x), .x)))
© www.soinside.com 2019 - 2024. All rights reserved.