我有多个for循环,它们从一个数据帧中提取日期并将它们与另一数据帧中的特定行/列进行匹配。我正在寻求帮助,将其变成单个函数或循环。
我尝试过嵌套循环,没有任何运气。
我看起来像这样的循环并执行我需要它们执行的操作:
for(x in id_vector) {
datafileslist[[x]]$m3start <- rep(dates_df[[x,3]], nrow(datafileslist[[x]]))
}
for(x in id_vector) {
datafileslist[[x]]$m3end <- rep(dates_df[[x,4]], nrow(datafileslist[[x]]))
}
for(x in id_vector) {
datafileslist[[x]]$m6start <- rep(dates_df[[x,5]], nrow(datafileslist[[x]]))
}
...等等。在此有效的同时,还有很多重复(我有16个for循环)。
我尝试了以下方法:
for(x in seq_along(id_vector)) {
for(z in 3:18) {
for(y in 20:35) {
datafileslist[[x]][[y]] <- rep(dates_df[[x,z]], nrow(datafileslist[[x]]))
}
}
}
但是我需要匹配的z和y对通过每个id串联(3、20; 4、21; ... 18、35)运行一次,而上面的代码并没有这样做。关于如何执行此操作的任何想法?
dates_df如下所示:
id m3start m3end
s01 2016-09-19 2016-12-17
s02 2016-11-03 2017-01-31
有60个ID和16个组合的开始/结束日期(m3,m6,m9等)。
数据文件列表是一个数据帧的列表,每个id一个数据帧,每个id具有50,000多个观察值,大约20个变量。我正在尝试为从dates_df数据框到每个id的数据框的每个日期范围添加带有开始和结束日期的列。
输出应如下所示:
id group m3start m3end m6start
s01 int 2016-09-19 2016-12-17 2018-09-08
s01 int 2016-09-19 2016-12-17 2018-09-08
s01 int 2016-09-19 2016-12-17 2018-09-08
运行嵌套的for循环时,我在m3start,m3end,m6start,m6end等中获得相同的日期。
id group m3start m3end m6start
s01 int 2020-01-12 2020-01-12 2020-01-12
s01 int 2020-01-12 2020-01-12 2020-01-12
s01 int 2020-01-12 2020-01-12 2020-01-12
答案 0 :(得分:1)
在数据帧列表的merge
中考虑lapply
:
new_datafileslist <- lapply(datafileslist, function(df) merge(df, dates_df, by="id"))