计算直到达到值的行数

时间:2016-06-27 20:36:48

标签: r count row

我正在尝试计算行数,直到达到某个值。 这是一个示例数据集:

trialtype <- c(1,1,0,1,1,0,0,1,0,1)
RT <- c(100,200,300,400,500,600,700,800,900,950)
fakedata <- cbind(trialtype,RT)

我想要做的是每个trialtype = 0,计算它上面的行数,其中trialtype = 1,直到它到达列的开头(对于第一个0)或直到它到达另一个0(对于其余的0),并创建一个包含行数的新向量。 所以我对这个数据集的假结果看起来像是

x <- c(1,2,3,4)
numones <- c(2,2,0,1)
fakeresults <- cbind(x,numones)

提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,使用相等比较和which()获取零的索引。然后,在索引向量上计算diff()减一,使用前置零以在第一个索引之前提供正确的距离。

zis <- which(fakedata[,'trialtype']==0);
data.frame(x=seq_along(zis),numones=diff(c(0L,zis))-1L);
##   x numones
## 1 1       2
## 2 2       2
## 3 3       0
## 4 4       1

仅当输入列中只有零和1时才会起作用。如果还有其他值,并且您只对在零之前计算 1 感兴趣,那么将需要更复杂的解决方案。