如何在 for 循环中正确生成和调用数据帧

How to properly generate and call dataframes in a for loop

我正在尝试使用 for 循环生成一些新的数据帧,这些数据帧是特定数据帧的子集,然后使用以下代码修改它们:

for(i in 2011:2017) {
      name <- paste("DF", i, sep = ".")
      assign(name, DF[DF$t==i,])
      DF2.[[i]] <- DF.[[i]] %>% group_by(Mes) %>% complete(Comuna = cms) %>% fill(t, .direction = "up")
}

据我所知:

for(i in 2011:2017) {
   name <- paste("DF", i, sep = ".")
   assign(name, DF[DF$t==i,])
}

在生成 2011 年至 2017 年的数据帧时工作。

我也知道密码:

DF2.(year) <- DF.(year) %>% group_by(Mes) %>% complete(Comuna = cms) %>% fill(t, .direction = "up")

可以生成我需要的行。 “(年)”不是代码的一部分,只是为了解释它用于生成的数据帧。

我尝试了很多方法来调用生成的数据帧 [i],[[i]],使用分配代码,但我总是得到同样的错误:

Error in group_by(., Mes) : object 'DF.' not found

所以我正在寻找一种解决方法,它允许我使用第四行代码或在此上下文中的 for 循环上调用数据帧的正确方法或文档以完全理解循环语法。

我在R(或代码)相关网站上发现了很多类似的问题或循环示例,但我仍然无法理解循环的语法。

谢谢,

正如 Martin Gal 所说,列表是更好的方法:

library(dplyr)

# Empty list to hold results
ll <- list()

for(i in 2011:2017) {
  ll[[paste0("DF.", i)]] <- DF %>%
    filter(t == i) %>%
    group_by(Mes) %>%
    complete(Comuna = cms) %>%
    fill(t, .direction = "up")
}

在这种情况下,每个列表元素都是一个数据框。您可以按名称访问这些数据框,例如ll[["DF.2011"]]