【问题标题】:How to combine for loops with 2+ variables?如何将 for 循环与 2+ 个变量结合起来?
【发布时间】:2019-03-25 18:21:22
【问题描述】:

我有多个 for 循环,它们从一个数据帧中提取日期并将它们匹配到另一个数据帧中的特定行/列。我正在寻求帮助将其转换为单个函数或循环。

我试过嵌套 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 大约 20 个变量的 50,000 多个观察值。我正在尝试为从 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

【问题讨论】:

  • 提供一些样本输入数据和预期输出。目前尚不清楚您到底想要实现什么。
  • 查看mapply 以并行运行两个列表。

标签: r for-loop


【解决方案1】:

考虑merge 在数据框列表上的lapply 中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2017-04-08
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多