在数据帧的每列中计算连续的1的数量

时间:2017-06-19 17:57:50

标签: r

我有一个数据框,每个单元格都有一个0或1.我想要一个代码遍历每一列并计算每列中的数量。如果1s连续45次进入列的单元格,那么该列的出现应该为1。我还想知道这种情况是否在一列中多次出现。因此,出现值可以是0(如果1s不连续45次进入列中),则为1或更多。我试着为此编码,但我不知道该怎么做。感谢您的任何帮助。

P.S如果1连续出现90次,那不应该让我出现2次。

1 个答案:

答案 0 :(得分:1)

我们可以使用rleid

中的data.table
library(data.table)
setDT(df1)[, lapply(.SD, function(x) {x1 <- rleid(x); list(table(x1[x!=0]))})]

或其他选项rle来自base R

lapply(df1, function(x) with(rle(x), lengths[values==1]))

数据

set.seed(24)
df1 <- as.data.frame(matrix(sample(0:1, 5*20, replace = TRUE), ncol=5))