Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将时间戳数据转换为开始时间和结束时间_R_Timeline - Fatal编程技术网

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

R 将时间戳数据转换为开始时间和结束时间,r,timeline,R,Timeline,我想使用timevis、timeline或其他软件包在R中创建一个时间线,但我需要将数据转换为开始和结束时间才能使用它。目前,我有一个二分法变量,指示活动和时间,如下所示 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

我想使用timevis、timeline或其他软件包在R中创建一个时间线,但我需要将数据转换为开始和结束时间才能使用它。目前,我有一个二分法变量,指示活动和时间,如下所示

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])
        )
    }

  }
其中:

dd$Name: Beth
  start.time stop.time
1          2         8
------------------------------------------------------------------------------------------- 
dd$Name: Joe
  start.time stop.time
1          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])
        )
    }

  }
其中:

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

Beth的开始和结束时间是多少?这可能会有所帮助。@kmm我认为理想情况下,它应该是从2到8,然后是从10到12(因为12没有测量)。所以Beth应该有两行活动时间。@mikeck这也有帮助-我怀疑dplyr也会有一个很好的方法来做这件事。非常感谢。Beth的开始和结束时间是多少?这可能会有所帮助。@kmm我认为理想情况下,它应该是从2到8,然后是从10到12(因为12没有测量)。所以Beth应该有两行活动时间。@mikeck这也有帮助-我怀疑dplyr也会有一个很好的方法来做这件事。非常感谢。这绝对让我开始-谢谢!它看起来是第一次激活,所以我想也捕捉到Joe从8点一直激活到最后。我想最简单的事情应该是时间12,因为没有“最后”时间,但它也可以让Joe从0到2,从8到10活跃起来。我也非常感谢代码的组织——我仍然习惯于编码,但这有助于我开始理解它。别忘了给服务员小费。:)如果有帮助,记得点击答案旁边的“向上”箭头。如果这是你要找的答案,点击复选标记。谢谢-我现在才意识到它会检查所有活动时间,除了上次,每个人只有一次。是否有一种简单的方法可以捕获最后一个活动时间,比如从Joe的时间8到12(这将结束最后一个时间戳)?通过更改
idx,您可以很容易地获得开始发生的事实,并且结束时间未知。这肯定让我开始-谢谢!它看起来是第一次激活,所以我想也捕捉到Joe从8点一直激活到最后。我想最简单的事情应该是时间12,因为没有“最后”时间,但它也可以让Joe从0到2,从8到10活跃起来。我也非常感谢代码的组织——我仍然习惯于编码,但这有助于我开始理解它。别忘了给服务员小费。:)如果有帮助,记得点击答案旁边的“向上”箭头。如果这是你要找的答案,点击复选标记。谢谢-我现在才意识到它会检查所有活动时间,除了上次,每个人只有一次。有没有一种简单的方法可以捕获最后一个活动时间,比如从Joe的时间8到12(这将结束最后一个时间戳)?通过更改
idx,您可以很容易地获得开始发生,结束时间未知的事实