首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R将6位数字转换为HMS,即"130041“改为"13:00:41”。

R将6位数字转换为HMS,即"130041“改为"13:00:41”。
EN

Stack Overflow用户
提问于 2022-05-03 08:59:58
回答 3查看 38关注 0票数 0

正如问题所述,我想将"130041“转换为"13:00:41”,即HMS数据。

润滑油::氨(“20220413”)工作没有问题,但润滑油::hms(“130041”)没有。

我想应该有一个合理的简单的解决方案?!

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-03 09:08:06

如果需要将输出作为lubridate Period对象,而不是字符向量,因为需要对其执行操作,则可以使用Tim建议的方法,将冒号分隔符添加到字符向量中,然后使用lubridate:

代码语言:javascript
复制
x <- "130041"

gsub("(\\d{2})(?!$)", "\\1:", x, perl = TRUE) |> 
    lubridate::hms() 
# [1] "13H 0M 41S" 

输出类似,但它是一个句点对象。我也使用了一个稍微不同的regex (当有两个数字后没有字符串结尾时添加一个冒号),但基本上是相同的方法。

票数 1
EN

Stack Overflow用户

发布于 2022-05-03 09:01:30

您可以在这里使用sub

代码语言:javascript
复制
x <- "130041"
output <- sub("(\\d{2})(\\d{2})(\\d{2})", "\\1:\\2:\\3", x)
output

[1] "13:00:41"
票数 1
EN

Stack Overflow用户

发布于 2022-05-03 11:46:03

另一个正则表达式也将在小时只使用数字的情况下起作用。

代码语言:javascript
复制
gsub("(?=(..){1,2}$)", ":", c("130041", "30041"), perl=TRUE)
#[1] "13:00:41" "3:00:41" 

可用于例如lubridate::hmshms::as_hms中。

base::as.difftime中可以给出一种格式:as.difftime("130041", "%H%M%S")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72097037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档