首页 > 解决方案 > 计算R中矩阵行中相同值的组数

问题描述

在下面的示例中,我显示了 R 中模拟的矩阵的第一行。行代表我的模拟中的一个人,列代表天。如果一个人在某一天发烧,则在此矩阵中将其编码为“1”。我想输出一个人发烧的次数。在下面的示例中,这将是 4 次(4 组 1)。有谁知道如何对此进行编码以将相邻的 1 计为一次出现?

out_fever[1,]

 [1] 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0

标签: rcountsequence

解决方案


我们循环使用apply并使用rle来计算每行中 1 的块数

out_fever$n_fever <- apply(out_fever, 1,  function(x)  with(rle(x), sum(values==1)))

对第一行使用可重现的示例

v1 <- c(0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  
      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0)
with(rle(v1),  sum(values == 1))
#[1] 4

推荐阅读