【发布时间】:2013-09-01 18:57:25
【问题描述】:
我正在尝试使用 R 中的 rle 函数来计算下面示例中变量 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)
当前的设置方式是读取变量positive 的所有可能值(0 和1)的运行长度。是否可以设置此函数,使其仅在 positive == 1 时评估运行长度?
归根结底,我最终想弄清楚如何计算每个受试者连续两个或更多个月为阳性 (positive == 1) 的实例数。 p>
更新:
我有一个名为 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 == 1。或者,如果只评估所有event == 0 的连续积极月份的数量更容易,那也是一个很好的解决方案。
【问题讨论】:
-
我已经相应地编辑了我的答案。请检查它是否有帮助。