gpt4 book ai didi

r - 将字符串 "days, hours, minutes, seconds"计算为数字总天数

转载 作者:行者123 更新时间:2023-12-01 08:04:22 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





R extract time components from semi-standard strings

(2 个回答)


5年前关闭。




我看到了很多与格式化时间有关的问题,但在我拥有的特定导入格式中没有一个:

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 .

最佳答案

lubridate在这里很有用。 hms自动提取小时、分钟和秒(为您节省一些正则表达式)和 time_length转换为天。

> library(lubridate)
> time_length(hms(Time), 'day')
estimate only: convert periods to intervals for accuracy
[1] 0.9190046 7.0939815 NA 0.2807523 0.4129167 14.8912963 19.3542477 NA
[9] 1.3187731 14.8119213

然而 hms如果没有三个数字,则无法解析,因此进行一些预清理会有所帮助:
> library(stringr)
> Time2 <- sapply(Time, function(x){paste(paste(rep(0, 3 - str_count(x, '[0-9]+')), collapse = ' '), x)})
> time_length(hms(Time2), 'day')
estimate only: convert periods to intervals for accuracy
[1] 9.190046e-01 7.093981e+00 4.513889e-04 2.807523e-01 4.129167e-01 1.489130e+01 1.935425e+01
[8] 5.902778e-04 1.318773e+00 1.481192e+01

关于r - 将字符串 "days, hours, minutes, seconds"计算为数字总天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com