【发布时间】:2016-05-07 09:13:07
【问题描述】:
我看到了很多与格式化时间有关的问题,但在我所拥有的特定导入格式中没有一个问题:
Time <- c(
"22 hours 3 minutes 22 seconds",
"170 hours 15 minutes 20 seconds",
"39 seconds",
"2 days 6 hours 44 minutes 17 seconds",
"9 hours 54 minutes 36 seconds",
"357 hours 23 minutes 28 seconds",
"464 hours 30 minutes 7 seconds",
"51 seconds",
"31 hours 39 minutes 2 seconds",
"355 hours 29 minutes 10 seconds")
有些时间只包含“秒”,而其他时间包含“分钟和秒”、“天、小时、分钟和秒”、“天和秒”等。还有我需要保留的 NA 值。如何获取此字符向量来计算(即添加天、小时、分钟、秒)数字总天数?
例如:
Time
8.10
19.3
0.68
2.28
48.1
0.00
0.70
0.1
3.2
13.9
谢谢!
编辑
老问题,但现在一个简单的lubridate 电话就可以解决问题:
(period_to_seconds(period(time)) / 86400) %>% round(2)
除了需要%>% 以提高可读性之外,这也可以在没有任何包的情况下使用:
Time_vec <- mapply(function(tt, to_days) {
ifelse(grepl(tt, Time), gsub(paste0("^.*?(\\d+) ", tt, ".*$"), "\\1", Time), 0) %>%
as.numeric() / to_days
},
c("day", "hour", "minute", "second"),
c(1, 24, 1440, 86400)
) %>%
apply(1, sum) %>%
round(2)
在我的实际数据中,只有一个值与 lubridate 解决方案不同,0.96 与 0.97。
【问题讨论】:
-
在
kimisc包中查找gsub()(在字符串中搜索和替换)和hms.to.seconds()以获取秒数。 -
你有没有尝试过