每个学年划分一个数据框
Divide a dataframe per school year
我有一个数据框,其中包含多个用于生存分析的条目。我想包括时变协变量,即 classes。例如,我有一个学生在 2008 年 12 月 9 日进入研究并在将近 6 年后离开了它。
我想知道是否有一种聪明的方法可以根据他 "crossed" 8 月 1 日和更改 class 的次数将他的条目分成多个条目。
比如我要转换如下数据框
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 并且进入和退出日期是任意的。
此致,
亚历克斯
这可能是一个选项(不是很优雅但有效)
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
我有一个数据框,其中包含多个用于生存分析的条目。我想包括时变协变量,即 classes。例如,我有一个学生在 2008 年 12 月 9 日进入研究并在将近 6 年后离开了它。
我想知道是否有一种聪明的方法可以根据他 "crossed" 8 月 1 日和更改 class 的次数将他的条目分成多个条目。
比如我要转换如下数据框
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 并且进入和退出日期是任意的。
此致,
亚历克斯
这可能是一个选项(不是很优雅但有效)
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