我正在尝试使用rle
R 中的函数来计算positive
下面示例中变量的运行长度,由变量聚合id
。
这是一个玩具数据集(诚然有一些怪癖):
test <- c('id', 'positive')
test$id <- rep(1:3, c(24, 24, 24))
set.seed(123456)
test$positive <- round(runif(72, 0, 1))
test <- data.frame(test)
test <- subset(test, select = -X.id.)
test <- subset(test, select = -X.positive.)
result <- aggregate(positive ~ id, data = test, FUN = rle)
当前设置的方式是读取变量的所有可能值(0 和 1)的运行长度positive
。是否可以调整此函数,使其仅在 时评估运行长度positive == 1
?
归根结底,我最终想弄清楚如何计算每个受试者连续两个或多个月为阳性 ( ) 的实例数。positive == 1
更新:
我有一个名为的变量event
,其值为 0 或 1。对于从以下建议中的代码开发的两个或多个阳性的每一次出现,是否可以对我们的结果进行分层,以便如果event == 1
发生在任何积极的月份它的分类方式与event == 0
所有月份的一系列积极因素不同?
玩具数据集如下所示:
set.seed(123456)
x <- c(1, 2, 1)
test <- data.frame(id = rep(1:3, each = 24), positive = round(runif(72, 0, 1)), event = round(runif(72, 0, 1)))
results <- aggregate(positive ~ id + event, data = test, FUN=function(x) with(rle(x), sum(lengths > 1 & values == 1)))
aggregate(positive ~ event, data = result, FUN=sum)
但是,此代码给出了 event 和 positive 的所有可能排列,而我想将结果限定为仅计算两个或多个连续正月的出现次数,其中任何event == 1
. 或者,如果只评估连续积极月份的数量更容易,那么这也是event == 0
一个很好的解决方案。