划分每个学年的数据框

时间:2015-08-05 21:46:43

标签: r date range survival-analysis

我有一个包含多个生存分析条目的数据框。我想包括时变协变量,即类。例如,我有一名学生在2008-12-09进入研究,差不多6年后就离开了。

我想知道是否有一种聪明的方法可以根据他多少次“越过”8月1日和改变班级来分配多个参赛作品。

例如,我想转换以下数据框

d <- data.frame(RandomID = 3350, injury = 0, 
enter = as.Date("2008-12-09", format = "%Y-%m-%d"), 
exit= as.Date("2014-07-02", format = "%Y-%m-%d"), injury_nb = 0)

d

 RandomID injury  enter   exit     injury_nb  class
1     3350  0  2008-12-09 2014-07-02    0       0

进入以下

 RandomID injury  enter   exit     injury_nb   class
1     3350  0  2008-12-09 2009-07-31    0        0
2     3350  0  2009-08-01 2010-07-31    0        1
3     3350  0  2010-08-01 2011-07-31    0        2
4     3350  0  2011-08-01 2012-07-31    0        3
5     3350  0  2012-08-01 2013-07-31    0        4
6     3350  0  2013-08-01 2014-07-02    0        5

请注意,我希望保持其当前信息不变,例如RandomID和injury_nb以及输入和退出日期是任意的。

致以最诚挚的问候,

亚历

1 个答案:

答案 0 :(得分:1)

这可能是一个选项(不是很优雅但有效)

d$enter = paste(c("2008-12-09", as.character(seq(as.Date("2009-08-01"), as.Date("2013-08-01"), "years"))), collapse =",")
d$exit  = paste(c(as.character(seq(as.Date("2009-07-31"), as.Date("2013-07-31"), "years")), "2014-07-02"), collapse =",")
d$class = paste(seq(0,5, by = 1, collapse =",")

library(splitstackshape)
cSplit(d, c('enter', 'exit', 'class'), ',', 'long')

#   RandomID injury      enter       exit injury_nb class
#1:     3350      0 2008-12-09 2009-07-31         0     0
#2:     3350      0 2009-08-01 2010-07-31         0     1
#3:     3350      0 2010-08-01 2011-07-31         0     2
#4:     3350      0 2011-08-01 2012-07-31         0     3
#5:     3350      0 2012-08-01 2013-07-31         0     4
#6:     3350      0 2013-08-01 2014-07-02         0     5