计算R中矩阵行中相同值的组数
Count the number of groups of the same value in a matrix row in 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
我们用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
在下面的示例中,我显示了 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
我们用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