我有一个带有时间段列的数据框,该列保存为字符,格式如下:
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中找到任何命令来解决这个问题。有什么帮助吗?
答案 0 :(得分:1)
所以,我最终根据@ Mako212和@thelatemail:
进行了以下操作days <- gsub("(\\d+)(?=\\sday).*", "\\1", x, perl=TRUE) # extracting the number of days
hours <- gsub(".*(\\S*\\s+\\S+)", "\\1", x, perl=TRUE) # getting rid of days
ind <- grep("(\\d+)(?=\\sday).*", x, perl=TRUE) # getting the indices of elements that have days
然后我使用as.difftime
来计算以小时为单位的时差。
time.hours <- as.difftime(x, format="%H:%M:%OS", units="hours")
现在,我需要计算我在向量days
中以小时为单位提取的天数,并将其添加到time.hours
。
for (i in ind) {
time.hours[ind] <- as.numeric(days[ind])*24 +
as.difftime(hours[ind], format="%H:%M:%OS", units="hours")
}
请注意,可能有更有效的方法来执行上述循环,但这就是我的方法。