【发布时间】:2013-09-11 05:22:15
【问题描述】:
我们有时间序列数据,其中测量了多个受试者的重复观察结果。我想计算每个主题(变量id)出现变量positive == 1的次数。
第二个目标是确定positive == 1 连续观察的最大长度。对于每个主题,在研究期间可能会有多次运行。我不想计算每个受试者连续阳性观察的最大数量,而是计算单个运行内的最大运行长度。
这是一个说明问题的玩具数据集:
set.seed(1234)
test <- data.frame(id = rep(1:3, each = 10), positive = round(runif(30,0,1)))
test$run <- sequence(rle(test$positive)$lengths)
test$run_positive <- ifelse(test$positive == '0', '0', test$run)
test$episode <- ifelse(test$run_positive == '1', '1', '0')
count(test$episode)
x freq
1 0 25
2 1 5
上面的代码接近回答我试图计算阳性情节数量的第一个问题,但它不受主题的限制。这具有在同一运行中计算对象#1 的最后一次观察和对象#2 的第一次观察的不幸效果。谁能帮我开发代码来按主题调节这种运行长度编码?
其次,如何仅提取每个运行的最大运行长度positive == 1?我想添加一个附加列,其中仅记录最大运行长度的观察结果。对于主题 #1,这看起来像:
id positive run run_positive episode max_run
1 1 0 1 0 0 0
2 1 1 1 1 1 0
3 1 1 2 2 0 0
4 1 1 3 3 0 0
5 1 1 4 4 0 0
6 1 1 5 5 0 5
7 1 0 1 0 0 0
8 1 0 2 0 0 0
9 1 1 1 1 1 0
10 1 1 2 2 0 2
如果有人能想出一个方法来做到这一点,我将非常感激。
【问题讨论】:
-
我不明白您的“每次运行的最大运行长度”。每次运行都有 一个 长度,因此“最大”在这里没有意义。至少对我来说不是。例如,id 1 的第一次运行,其中正数 = 1 的长度为 5。在 id 内,正数 = 1 的运行内,您想用前导零填充运行长度吗?
-
第一个问题可以试试
with(test, table(id, positive)) -
抱歉,如果我使用了错误的术语来描述我正在寻找的内容。你说得对,我希望用前导零“填充”运行长度。您在示例
with(test, table(id, positive))中提供的代码非常接近。唯一的问题是它将每位患者的所有跑步次数加在一起,而我想为每个受试者唯一地定义每次跑步的跑步长度。因此,与其报告 ID#1 有 7 个正数,不如说 ID#1 有 2 个长度为 5 和 2 的运行。然后我想将该输出包装到test并用前导填充它零。 -
对不起,如果我不清楚,我的建议只提到了我认为的第一个问题:“每个主题出现变量 positive == 1 的次数”。