计算列表中出现的次数,技巧?

Count the number of appeareances in a list, trick?

我有一个1和0的矩阵。关于这个table的规则如下。

我想计算 1,1 系列出现的次数(其中 1 没有被 0 分隔!),并为 1,1,1 系列做同样的事情。我试过 colSums 但它似乎不是很合适。

最后的矩阵是

      t1 t2 t3 t4 t5 t6 t7
 [1,]  0  0  0  0  1  1  0
 [2,]  0  0  1  1  0  0  1
 [3,]  1  1  0  0  0  0  0
 [4,]  0  0  1  1  1  0  0
 [5,]  0  0  1  1  0  0  0
 [6,]  1  1  0  0  0  0  0
 [7,]  0  0  0  0  0  0  1
 [8,]  0  0  0  0  1  1  0
 [9,]  1  1  0  0  1  1  0
[10,]  0  0  0  0  0  1  1
[11,]  1  1  0  0  0  0  0
[12,]  0  0  1  1  0  0  0
[13,]  0  0  0  0  0  0  0
[14,]  0  0  0  0  0  0  1
[15,]  0  0  0  0  0  0  0

因此,对于第一行,我希望有 1 次 1,1 系列和 0 次 1,1,1 系列。对于第 4 行,我希望有 0 次 1,1 系列,但有 1 次 1,1,1 系列。

任何人都可以告诉我下面的 1,1 系列代码有什么问题吗?

occ <- matrix()
occ_temp <- matrix
for (j in 1:nrow(final)){
  for (i in 2:7){
    if (sum(final[j,i-1:i])==2){occ_temp[j,i-1]=1}
  }
occ[j] <- sum(occ_temp)
}

我们可以使用 apply 遍历行,使用 rle 获取 运行-length-type,提取 lengths 其中 values是 1,检查是否等于 'n1' 和 'n2',并得到 sum.

n1 <- 2
n2 <- 3
res <- t(apply(m1, 1, FUN=function(x) {
       x1 <- with(rle(x), lengths[!!values])
       c(sum(x1==n1), sum(x1==n2))
}))
colnames(res) <- paste0("count", c(11, 111))
res
#      count11 count111
# [1,]       1        0
# [2,]       1        0
# [3,]       1        0
# [4,]       0        1
# [5,]       1        0
# [6,]       1        0
# [7,]       0        0
# [8,]       1        0
# [9,]       2        0
#[10,]       1        0
#[11,]       1        0
#[12,]       1        0
#[13,]       0        0
#[14,]       0        0
#[15,]       0        0