这是我目前拥有的数据:
df
patient ID Index_admission? adm_date dish_date
1244 FALSE 2/7/2009 2/8/2009
1244 TRUE 3/5/2009 3/15/2009
1244 FALSE 4/5/2011 4/7/2011
1244 FALSE 3/25/2012 3/27/2012
1244 TRUE 5/5/2012 5/20/2012
1244 TRUE 9/8/2013 9/15/2013
1244 FALSE 1/5/2014 1/15/2014
2333 FALSE 1/1/2010 1/8/2010
2333 FALSE 1/1/2011 1/5/2011
2333 TRUE 2/2/2011 2/25/2011
2333 FALSE 1/25/2012 1/28/2012
5422 TRUE 3/5/2015 3/15/2015
1243 TRUE 2/5/2009 2/8/2009
1243 TRUE 2/5/2011 2/19/2011
我需要找到之前time_to_readmission
中的Index_admission
。我需要添加一个新列,从正确的adm_date
中减去dish_date
。只有在患者已经TRUE
Index_admission
时,才应该这样做。
ALSO 如果患者有多个Index_admission
,则应始终将time_to_readmission计算到最近的Index_admission
日期。
虽然看看我希望数据看起来如何,但可能更容易解释:
df1
patient ID Index_admission? adm_date dish_date time_to_readmission
1244 FALSE 2/7/2009 2/8/2009 NA
1244 TRUE 3/5/2009 3/15/2009 NA
1244 FALSE 4/5/2011 4/7/2011 751
1244 FALSE 3/25/2012 3/27/2012 1106
1244 TRUE 5/5/2012 5/20/2012 1147
1244 TRUE 9/8/2013 9/15/2013 476
1244 FALSE 1/5/2014 1/15/2014 112
2333 FALSE 1/1/2010 1/8/2010 NA
2333 FALSE 1/1/2011 1/5/2011 NA
2333 TRUE 2/2/2011 2/25/2011 NA
2333 FALSE 1/25/2012 1/28/2012 334
5422 TRUE 3/5/2015 3/15/2015 NA
1243 TRUE 2/5/2009 2/8/2009 NA
1243 TRUE 2/5/2011 2/19/2011 727
请帮我完成所需的编码。提前致谢。
> dput(df)
structure(list(patient.ID = c(124L, 124L, 124L, 124L, 124L, 124L,
124L, 233L, 233L, 233L, 233L, 542L, 1243L, 1243L), Index.admission. = c(FALSE,
TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE,
TRUE, TRUE, TRUE), adm_date = structure(c(8L, 10L, 12L, 9L, 13L,
14L, 4L, 1L, 2L, 5L, 3L, 11L, 6L, 7L), .Label = c("1/1/2010",
"1/1/2011", "1/25/2012", "1/5/2014", "2/2/2011", "2/5/2009",
"2/5/2011", "2/7/2009", "3/25/2012", "3/5/2009", "3/5/2015",
"4/5/2011", "5/5/2012", "9/8/2013"), class = "factor"), dish_date = structure(c(7L,
8L, 11L, 10L, 12L, 13L, 1L, 4L, 3L, 6L, 2L, 9L, 7L, 5L), .Label = c("1/15/2014",
"1/28/2012", "1/5/2011", "1/8/2010", "2/19/2011", "2/25/2011",
"2/8/2009", "3/15/2009", "3/15/2015", "3/27/2012", "4/7/2011",
"5/20/2012", "9/15/2013"), class = "factor")), .Names = c("patient.ID",
"Index.admission.", "adm_date", "dish_date"), class = "data.frame", row.names = c(NA,
-14L))
答案 0 :(得分:1)
这应该有效。请注意,我运行时遇到data.table
类型错误,但答案是正确的。
这里有一点需要注意的是,这会计算从符合条件的第一个dish_date
开始重新接收的时间,这是您在帖子中请求的内容“从{{1>中减去adm_date
(前一行)“。您没有指定前一行......我正在按照您的标准开始dish_date
。
从您的示例输出中,这不完全是您正在做的事情。相反,你似乎对如何选择“前一行”有一些不明确的标准。目前尚不清楚这条规则是什么。如果您想要不同的输出,请澄清问题
dish_date