正如问题所述,我想将"130041“转换为"13:00:41”,即HMS数据。
润滑油::氨(“20220413”)工作没有问题,但润滑油::hms(“130041”)没有。
我想应该有一个合理的简单的解决方案?!
谢谢。
发布于 2022-05-03 09:08:06
如果需要将输出作为lubridate Period对象,而不是字符向量,因为需要对其执行操作,则可以使用Tim建议的方法,将冒号分隔符添加到字符向量中,然后使用lubridate:
x <- "130041"
gsub("(\\d{2})(?!$)", "\\1:", x, perl = TRUE) |>
lubridate::hms()
# [1] "13H 0M 41S" 输出类似,但它是一个句点对象。我也使用了一个稍微不同的regex (当有两个数字后没有字符串结尾时添加一个冒号),但基本上是相同的方法。
发布于 2022-05-03 09:01:30
您可以在这里使用sub:
x <- "130041"
output <- sub("(\\d{2})(\\d{2})(\\d{2})", "\\1:\\2:\\3", x)
output
[1] "13:00:41"发布于 2022-05-03 11:46:03
另一个正则表达式也将在小时只使用数字的情况下起作用。
gsub("(?=(..){1,2}$)", ":", c("130041", "30041"), perl=TRUE)
#[1] "13:00:41" "3:00:41" 可用于例如lubridate::hms或hms::as_hms中。
在base::as.difftime中可以给出一种格式:as.difftime("130041", "%H%M%S")
https://stackoverflow.com/questions/72097037
复制相似问题