R:为选定数量的值减去后续行

时间:2016-01-21 00:00:42

标签: r

这是我目前拥有的数据:

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))

1 个答案:

答案 0 :(得分:1)

这应该有效。请注意,我运行时遇到data.table类型错误,但答案是正确的。

这里有一点需要注意的是,这会计算从符合条件的第一个dish_date开始重新接收的时间,这是您在帖子中请求的内容“从{{1>中减去adm_date (前一行)“。您没有指定前一行......我正在按照您的标准开始dish_date

从您的示例输出中,这不完全是您正在做的事情。相反,你似乎对如何选择“前一行”有一些不明确的标准。目前尚不清楚这条规则是什么。如果您想要不同的输出,请澄清问题

dish_date
相关问题