R:将文本持续时间(“..- .. .. ..”)转换为秒

时间:2016-05-04 05:28:52

标签: regex r duration

尝试将以下持续时间转换为秒

TextBox

我在这篇文章Convert factor of format Hh Mm Ss to time duration中修改了Jthorpe的答案。

x <- "1005d 16h 09m 57s"
x1 <- "16h 09m 57s"
x2 <- "06h 09m 57s"
x3 <- "09m 57s"
x4 <- "57s"

但是,这仅适用于x,而不适用于x1-x4。现在,我知道我可以使用if逻辑解决这个问题,但是有更好的方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:4)

我们可以使用\\s+使用+更改空格字符(gsub),然后我们就可以替换&#39; d&#39; h&#39; h&#39; ,&#39; m&#39; s&#39; s&#39;使用gsubfn并循环输出并评估字符串。

library(gsubfn)
v2 <- gsubfn("[a-z]", list(d="*24*60*60", h = "*60*60", m = "*60",
        s="*1"), gsub("\\s+", "+", v1))
unname(sapply(v2, function(x) eval(parse(text=x))))
#[1] 86890197    58197    22197      597       57

数据

 v1 <- c(x, x1, x2, x3, x4)

答案 1 :(得分:1)

使用:

ifelse(is.na(your_exp),0)

因此,只要na是表达式的输出,就会变为0

例如:

days <- ifelse(is.na(as.numeric(gsub('^*([0-9]+)d.*$','\\1',x1))),0)
hours <- ifelse(is.na(as.numeric(gsub('^.*([0-9][0-9])h.*$','\\1',x1))),0)
minutes <- ifelse(is.na(as.numeric(gsub('^.*([0-9][0-9])m.*$','\\1',x1))),0)
seconds <- ifelse(is.na(as.numeric(gsub('^.*([0-9][0-9])s.*$','\\1',x1))),0)

输出:(在duration_seconds <- seconds + 60*minutes + 60*60*hours + 24*60*60*days之后)

> duration_seconds
[1] 58197