用R计算持续时间

时间:2015-03-12 08:45:07

标签: r duration

我想知道是否有一种简单的方法来计算持续时间。我有一个数据集,其中一个名为m的参数在时间值-11之间变化。我想算一下:

  1. m=-1m=1个案的总持续时间(以小时为单位) 分别
  2. m=-1m=1分别为

    的每个案例有多长时间

    M< -c(1,1,1,1,-1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,-1, -1,1,1,1,1,1,1,1)

    时间< - seq.POSIXt(as.POSIXct(Sys.Date()),as.POSIXct(Sys.Date()+ 1),by =“1小时”)

1 个答案:

答案 0 :(得分:2)

我使用package data.table for" split-apply-combine"并使用cumsumdiff确定运行:

DF <- read.table(text="Time,    m
2015-01-01 00:00,    -1
2015-01-01 01:00,    -1
2015-01-01 02:00,    -1
2015-01-01 03:00,    1
2015-01-01 04:00,    1
2015-01-01 05:00,    1
2015-01-01 06:00,    1
2015-01-01 07:00,    1
2015-01-01 08:00,    -1
2015-01-01 09:00,    -1
2015-01-01 10:00,    -1
2015-01-01 11:00,    -1
2015-01-01 12:00,    1
2015-01-01 13:00,    1
2015-01-01 14:00,    1
2015-01-01 15:00,    -1", header = TRUE, sep =",")

library(data.table)
setDT(DF)
DF[, Time := as.POSIXct(Time, format = "%Y-%m-%d %H:%M", tz = "GMT")]
DF[, run := cumsum(c(1, diff(m) != 0))]

DF1 <- DF[, list(m = unique(m), 
                 duration = difftime(max(Time), min(Time), unit = "min")), 
          by = run]
#   run  m duration
#1:   1 -1 120 mins
#2:   2  1 240 mins
#3:   3 -1 180 mins
#4:   4  1 120 mins
#5:   5 -1   0 mins

DF1[, sum(duration), by = m]
#    m  V1
#1: -1 300
#2:  1 360