【问题标题】:Count the number of appeareances in a list, trick?计算列表中出现的次数,技巧?
【发布时间】:2016-02-22 10:04:04
【问题描述】:

我有一个 1 和 0 的矩阵。有关此表的规则如下。

我想计算一系列 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)
}

【问题讨论】:

    标签: r list find-occurrences


    【解决方案1】:

    我们可以使用apply 遍历行,使用rle 获取运行长度类型,提取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
    

    【讨论】:

    • 您以非凡的精确度明确地回答了我的所有问题。我非常感谢你。不知道这个函数rle,我去看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多