【发布时间】:2017-12-03 23:07:29
【问题描述】:
我有一个数据框,其中包含一个保存为字符的时间段列,格式如下:
x
[1] "00:17:31.199" "1 day 01:37:46.22" "00:43:11.51" "01:18:37.721" ...
我想将此列的值转换为小时(和小时小数)31/,以便返回列是
[1] 0.28 25.61 0.71 1.3 ...
其中 0.28 是 17/60 小时,25.61 等于 24+1+37/60。请注意,所有内容都保存为字符。我在 baseR 或 lubridate 中找不到任何命令来解决这个问题。有什么帮助吗?
【问题讨论】:
-
您可以与
as.difftime(x, format="%H:%M:%OS", units="hours")接近,但您将不得不单独处理前面带有n day(s)的情况。 -
我可能会使用正则表达式将日期拆分为一个单独的向量,然后您可以按照@thelatemail 的建议将该向量添加回您的 H:M:S 数据中。
-
这是一种使用
grep和gsub的方法:首先获取以天数开头的索引向量:ind <- grep("(\\d+)(?=\\sday).*",x,perl=TRUE),然后提取天数:days <- gsub("(\\d+)(?=\\sday).*","\\1",x,perl=TRUE),然后拔掉那些没有日子的人,days[-ind] <- NA -
谢谢!这很有帮助。