首页 > 解决方案 > r:回合的新可变持续时间

问题描述

我正在使用加速度计数据(SB 列),并想添加一个变量来计算活动回合的长度,例如坐(SB),并在人起床后重新开始计数(“SB_count”)。在第二步中,我想创建一个第二个变量(“SB_bout”,它只保留最终的回合长度值。

我已经坚持了一段时间,可能是因为我使用了错误的搜索词,所以如果有人能指出我正确的方向,我会非常感激它。

这应该是这样的:

      SB      SB_count  SB_bout
1     1       1         0
2     1       2         0
3     1       3         3
4     0       0         0
5     1       1         0
6     1       2         2

标签: r

解决方案


想我用你的玩具例子破解了它。对于 SB_bout,我使用@Tommy的函数来查找向量中的局部峰值。我认为它应该对您可能拥有这种格式的其他数据起到作用,但是您应该看看该函数的细节。

Data <- data.frame(SB = c(1,1,1,0,1,1))

Data$SB_count <- ave(Data$SB, cumsum(Data$SB==0), FUN=cumsum)

# Find peaks function
localMaxima <- function(x) {
  # Use -Inf instead if x is numeric (non-integer)
  y <- diff(c(-.Machine$integer.max, x)) > 0L
  rle(y)$lengths
  y <- cumsum(rle(y)$lengths)
  y <- y[seq.int(1L, length(y), 2L)]
  if (x[[1]] == x[[2]]) {
    y <- y[-1]
  }
  y
}

Data$SB_bout <- Data$SB_count
Data$SB_bout[-localMaxima(Data$SB_count)] <- 0

Data

  SB SB_count SB_bout
1  1        1       0
2  1        2       0
3  1        3       3
4  0        0       0
5  1        1       0
6  1        2       2

推荐阅读