【问题标题】:How to subtract time in R?如何在R中减去时间?
【发布时间】:2020-12-09 16:05:47
【问题描述】:

我有两列 1) Start.Time 2) End.Time .

两列中的数据都是 chr 格式和“00:00:00”。

如何获得具有持续时间的列? (End.Time. - Start.Time)

感谢您的帮助。

【问题讨论】:

  • 将它们转换为像POSIXct 这样的日期时间类,然后减法就可以了。见a couple options here

标签: r dataframe time


【解决方案1】:

我们也可以用data.table 转换成ITime 并得到区别

library(data.table)
setDT(df)[, duration := as.ITime(t1) - as.ITime(t2)]

-输出

df
#        t1       t2 duration
#1: 12:24:13 10:46:34 01:37:39
#2: 10:04:39 09:43:23 00:21:16

数据

df <- data.frame(t1 = c("12:24:13", "10:04:39"), t2 = c("10:46:34", "09:43:23"))

【讨论】:

    【解决方案2】:

    你可以试试chron

    transform(
      df,
      duration = chron(times = t1) - chron(times = t2)
    )
    

    这样

            t1       t2 duration
    1 12:24:13 10:46:34 01:37:39
    2 10:04:39 09:43:23 00:21:16
    

    数据

    df <- data.frame(t1 = c("12:24:13", "10:04:39"), t2 = c("10:46:34", "09:43:23"))
    

    【讨论】:

    • 谢谢。问题是我在每列中有 700 个观察值,那么如何使用 hms() 转换整个列
    • @roosadahal 我更新了我的答案,所以它可能适用于您的数据框
    【解决方案3】:

    你可以试试:

    t1 <- c('12:24:13','10:04:39')
    t2 <- c('10:46:34','09:43:23')
    
    unclass(as.POSIXct(t1,format="%H:%M:%S")) - unclass(as.POSIXct(t2,format="%H:%M:%S"))
    [1] 5859 1276
    attr(,"tzone")
    

    POSIXct 是自纪元以来的秒数,即 1970-01-01。在上面的例子中,输出是以秒为单位的时间差。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多