如何结合2个以上变量的for循环?

时间:2019-03-25 18:21:22

标签: r for-loop

我有多个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

1 个答案:

答案 0 :(得分:1)

在数据帧列表的merge中考虑lapply

new_datafileslist <- lapply(datafileslist, function(df) merge(df, dates_df, by="id"))