【发布时间】:2015-07-07 16:29:42
【问题描述】:
我的问题似乎很简单,我希望它是。
我有一个数据框,其中包含疾病诊断日期、指示患者服用哪种药物(或暴露和未暴露组)的二元变量、药物的开始和停止日期以及总体停止日期。
ID Diag_date Treatment End.date Drug.start drug.end
1 NA 0 15/03/2002 01/01/2002 01/02/2002
1 NA 1 15/03/2002 01/02/2002 01/03/2002
1 NA 0 15/03/2002 01/03/2002 NA
2 01/04/2002 1 01/05/2002 01/01/2015 01/02/2002
2 01/04/2002 0 01/05/2002 01/02/2002 01/03/2002
2 01/04/2002 0 01/05/2002 01/03/2002 NA
如您所见,诊断日期不随时间变化,但药物开始和停止日期是随时间变化的。
最好我想回答两个问题:
1.) 如何将每个ID 的整体End.date 转移到最终drug.end?
2.) 如何创建一个二进制列来显示诊断日期是否出现在Drug.start 和Drug.end 之间的时间间隔内?
我希望我的最终数据如下所示:
ID Diag_date Treatment End.Date Drug.start Drug.end Event
1 NA 0 15/03/2002 01/01/2002 01/02/2002 0
1 NA 1 15/03/2002 01/02/2002 01/03/2002 0
1 NA 0 15/03/2002 01/03/2002 15/03/2002 0
2 01/04/2002 1 01/05/2002 01/01/2015 01/02/2002 0
2 01/04/2002 0 01/05/2002 01/02/2002 01/03/2002 0
2 01/04/2002 0 01/05/2002 01/03/2002 01/05/2002 1
并非每个人都有诊断日期,因为样本中并非每个人都患有这种疾病。我写的代码如下:
for (i in 1:nrow(df)) {
if ((df$Diag_date[i] >= df$Drug.start[i]) && ( df$Diag_date[i] <= df$Drug.stop[i])) {
df$Event[i] <- 1
} else {
df$Event[i] <- 0
}
}
我运行这段代码时遇到的错误是:
missing value where TRUE/FALSE needed
任何帮助将不胜感激。
【问题讨论】:
-
非常感谢您的所有意见。我已经标记了我使用的答案,但它们都非常有帮助。