【问题标题】:How to Create New Data Frames Whose Names Are Based On Each Iteration Of A For Loop in R如何创建名称基于 R 中 For 循环的每次迭代的新数据框
【发布时间】:2021-12-22 12:00:46
【问题描述】:

我有 10 个 Excel 文件要读入 R,它们的名称如下:

  • 数据 - 2021 年 1 月.xlsx
  • 数据 - 2021 年 2 月.xlsx
  • 数据 - 2021 年 3 月.xlsx
  • 数据 - 2021 年 4 月.xlsx
  • 数据 - 2021 年 5 月.xlsx
  • 数据 - 2021 年 6 月.xlsx
  • 数据 - 2021 年 7 月.xlsx
  • 数据 - 2021 年 8 月.xlsx
  • 数据 - 2021 年 9 月.xlsx
  • 数据 - 2021 年 10 月.xlsx

我可以编写 10 次 R 代码,每月一次,如下:

data_January_2021 <- read.xlsx("Data - January 2021.xlsx")
data_February_2021 <- read.xlsx("Data - February 2021.xlsx")
data_March_2021 <- read.xlsx("Data - March 2021.xlsx")
data_April_2021 <- read.xlsx("Data - April 2021.xlsx")
data_May_2021 <- read.xlsx("Data - May 2021.xlsx")
data_June_2021 <- read.xlsx("Data - June 2021.xlsx")
data_July_2021 <- read.xlsx("Data - July 2021.xlsx")
data_August_2021 <- read.xlsx("Data - August 2021.xlsx")
data_September_2021 <- read.xlsx("Data - September 2021.xlsx")
data_October_2021 <- read.xlsx("Data - October 2021.xlsx")

但是,由于文件名仅按月份不同,所以我决定编写一个for循环来简化处理,如下所示。

months <- c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October")

for (i in 1:length(months)) {
   data_[i]_2021 <- read.xlsx(paste0("Data - ", months[i], " 2021.xlsx"))
}

同样,这个 for 循环的目标是在 R 环境中创建以下数据框:

data_January_2021
data_February_2021
data_March_2021
data_April_2021
data_May_2021
data_June_2021
data_July_2021
data_August_2021
data_September_2021
data_October_2021

但是,当我运行它时,我收到以下错误:

Error: object 'data_' not found

我将如何修复 for 循环来做到这一点?

【问题讨论】:

  • 在开始分配对象之前,您还没有创建对象data。不要使用data 作为对象的名称,因为它是函数的名称。 R 通常会正确处理,但是当事情不明确时(使用不存在的对象名称),错误消息可能不会像其他情况那样清晰。
  • data_[i]_2021 毫无意义。方括号用于索引。在这里,您尝试使用它们根据i 的内容命名对象。如果您确定需要使用这些名称创建这些数据框,您可以使用assign() 函数(基本包)并调用paste0() 作为x 参数。您也可以考虑将所有内容放在一个数据框或列表中。
  • @dcarlson 我使用data 作为假设。所以在 for 循环中的第一条语句之前,像 data_[i]_2021

标签: r for-loop


【解决方案1】:

我们可以使用lapplylist.files 来创建数据框列表。

lapply(list.files(pattern="Data.*2021\\.xlsx"), \(x) readxl::read_xlsx(x))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多