将时间戳数据转换为开始时间和结束时间

Transform timestamp data into starttimes and endtimes

我想使用 timevis、timeline 或其他包在 R 中制作时间线,但我需要将数据转换为开始时间和结束时间才能使用它。目前我有一个二分变量,表示 activity 和如下所示的时间。

Name    Time    Active
Joe     0       1
Joe     2       1
Joe     4       0
Joe     6       0
Joe     8       1
Joe     10      1
Beth    0       0
Beth    2       1
Beth    4       1
Beth    6       1
Beth    8       0
Beth    10      1

所以我希望能够将其转换为开始时间和结束时间,例如

Name StartTime EndTime
Joe  0         4

等等

有没有人有任何好的方法来做到这一点?

这让你入门了吗?

  idxRun <- function(df, ...) {
      x <- df$Active
      times <- df$Time

      # take a vector x and return a vector of change indicies.
      dif <- diff(x) != 0
      idx <- c(TRUE, dif) 
      dat <- list(
        state=x[idx],
        time=times[idx]
      )
      # now neatly arrange the start / stop times.
      starts <- dat$time[dat$state == 1]
      stops <- dat$time[dat$state == 0 & (dat$time > starts[1])]
      # line up the vectors
      min.len <- min(c(length(starts), length(stops)))
      if(min.len == 0) {
        return(data.frame(start.time = NULL, stop.time = NULL))
      } else {
         return(
           data.frame(
             start.time = starts[1:min.len],
             stop.time = stops[1:min.len])
        )
    }

  }

by 一起使用:

by(dd,INDICES = dd$Name, FUN=idxRun)

给出:

dd$Name: Beth
  start.time stop.time
1          2         8
------------------------------------------------------------------------------------------- 
dd$Name: Joe
  start.time stop.time
1          0         4