首页 文章

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

提问于
浏览
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

任何帮助赞赏 .

2 回答

  • 2

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

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

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

相关问题