【问题标题】:R: convert text duration ("..d ..h ..m ..s") into secondsR:将文本持续时间(“..d ..h ..m ..s”)转换为秒
【发布时间】:2016-08-29 09:17:36
【问题描述】:

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

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

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

days <- as.numeric(gsub('^*([0-9]+)d.*$','\\1',x3))
hours <- as.numeric(gsub('^.*([0-9][0-9])h.*$','\\1',x3))
minutes <- as.numeric(gsub('^.*([0-9][0-9])m.*$','\\1',x4))
seconds <- as.numeric(gsub('^.*([0-9][0-9])s.*$','\\1',x4))
duration_seconds <- seconds + 60*minutes + 60*60*hours + 24*60*60*days

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

提前致谢。

【问题讨论】:

    标签: regex r duration


    【解决方案1】:

    我们可以使用gsub将空格字符(\\s+)更改为+,然后我们可以将'd'、'h'、'm'、's'替换为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)
    

    【讨论】:

    • @akrun,哇,我喜欢这个。我会花一些时间来了解第二部分。哈哈
    • 这是解决常见且丑陋问题的绝妙方法。
    • @akrun,我用这种方法给自己带来了另一个麻烦。我正在使用数据框 df,然后 df$v3
    • @woshishui 这一定是因为有多个元素导致list 输出。你能展示一个显示问题的小数据吗? 'v2' 的输出是什么?
    • @akrun。该列表是由持续时间中的空白条目引起的(更改 x4
    【解决方案2】:

    用途:

    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 &lt;- seconds + 60*minutes + 60*60*hours + 24*60*60*days之后)

    > duration_seconds
    [1] 58197
    

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2020-02-14
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 2020-03-18
      • 2013-10-04
      相关资源
      最近更新 更多