【发布时间】:2021-10-26 12:44:02
【问题描述】:
我正在尝试创建一系列数据帧,这些数据帧是按日期范围(2 年块)从较大数据帧中提取的子集,以便对每个新数据帧进行单独的生存分析。我不能使用“拆分”来基于一个因素拆分数据帧,因为数据需要存在于多个子集中。
我有一些示例数据如下:
Patient <- c(1:10)
First.Appt <- c("2014-01-01","2014-03-02","2015-05-17","2015-06-03","2016-01-12","2016-11-07","2017-07-08","2017-09-09","2018-04-12","2018-05-13")
DOD <- c("2014-01-29","2014-03-30","2015-06-14","2015-07-01","2016-02-09","2016-12-05","2017-08-05","2017-10-07","2018-05-10","2018-06-10")
First.Appt.Year <- c(2014,2014,2015,2015,2016,2016,2017,2017,2018,2018)
df <- as.data.frame(cbind(Patient, First.Appt, DOD, First.Appt.Year))%>%
mutate_at("First.Appt.Year", as.numeric)
我已经创建了一个开始日期(最小的 First.Appt.Year)、最终开始日期(最大的 First.Appt.Year - 1),然后是一个包含我的所有开始日期的向量,从它开始子集完整 2-年块如下:
Start.year <- as.numeric(min(df$First.Appt.Year))
Final.start.year <- max(df$First.Appt.Year) - 1
Start.vec <- c(Start.year:Final.start.year)
我想使用带有 lapply 的 for 循环来创建一个基于 First.Appt.Year 的子集,该子集在 Start.vec 和 Start.vec + 1 的范围内,对于 Start.vec 的每个值如下:
for (i in 1:length(Start.vec)){
new.df = lapply(Start.vec, function(x)
subset(df, First.Appt.Year == Start.vec[i] | First.Appt.Year == Start.vec[i] + 1))
}
这几乎有效,但不是创建四个不同的数据帧(例如 2014-2015、2015-2016、2016-2017 和 2017-2018),而是仅输出列表中的所有四个数据帧包含 2017-2018 年的值如下。
| Patient | First.Appt | DOD | First.Appt.Year |
|---|---|---|---|
| 7 | 08/07/2017 | 05/08/2017 | 2017 |
| 8 | 09/09/2017 | 07/10/2017 | 2017 |
| 9 | 12/04/2018 | 10/05/2018 | 2018 |
| 10 | 13/05/2018 | 10/06/2018 | 2018 |
谁能帮我解决我做错了什么以及如何将不同的子集返回到每个列表对象中?
如果有其他看起来更合乎逻辑的方法,请告诉我。
【问题讨论】: