【发布时间】:2021-11-10 10:37:45
【问题描述】:
我对 R 比较陌生。我有一个假设的数据集,其中包含来自各种不同患者和药物类型的处方。我想做的是创建吸毒事件,即我想看看患者使用药物的时间。 sequentially update rows in data.table 帖子中提到的循环对我有用,但我不确定如何确保在遇到新的患者标识符或药物类型时循环重新开始。
这些是数据集“AllDrugs”中的一些行:
DrugType ID Duration StartPrescr EndPrescr n
1 1 90 5-3-2020 3-6-2020 1
1 2 30 7-1-2020 6-2-2020 1
1 2 30 14-1-2020 12-6-2020 2
1 2 30 21-01-2020 19-6-2020 3
注意:n 是一个数字,表示处方的 ID 和 DrugType
这是当前循环:
for (i in 2:nrow(AllDrugs)) {
if (AllDrugs[i,StartPrescr] >= AllDrugs[i-1,EndPrescr]) {
AllDrugs[i, EndPrescr:= StartPrescr+ Duration]
} else {
AllDrugs[i, EndPrescr:= AllDrugs[i-1,EndPrescr] + Duration]
}
}
这是我得到的:
DrugType ID Duration StartPrescr EndPrescr n
1 1 90 5-3-2020 3-6-2020 1
1 2 30 7-1-2020 3-7-2020 1
1 2 30 14-1-2020 2-8-2020 2
1 2 30 21-01-2020 1-9-2020 3
这就是我想要的:
DrugType ID Duration StartPrescr EndPrescr n
1 1 90 5-3-2020 3-6-2020 1
1 2 30 7-1-2020 6-2-2020 1
1 2 30 14-1-2020 7-3-2020 2
1 2 30 21-01-2020 6-4-2020 3
如何根据 ID 和 DrugType 的处方持续时间来调整处方?注意:这是一种药物类型的示例,但 DrugType 也可以是 2 或 3 等。
【问题讨论】:
-
StartEpisode背后的想法是什么?为什么StartPrescr改变了您想要的输出? -
StartEpisode 背后的想法是,在经过几次修改后,我想每次连续使用 DrugType 转到一行。我现在已经在数据集中删除了这个变量,以使我的问题更清楚。 StartPrescr 在输入和所需输出中应该相同(我已经更新了示例行)。
标签: r loops data.table