【问题标题】:reading excel files into a single dataframe with readxl R使用 readxl R 将 excel 文件读入单个数据帧
【发布时间】:2015-09-18 20:52:45
【问题描述】:

我有一堆 excel 文件,我想读取它们并将它们合并到一个数据框中。 我有以下代码:

library(readxl)
files <- list.files()
f <- list()
data_names <- gsub("[.]xls", "", files)

将每个excel文件读入数据框

for (i in 1:length(files)){
 assign(data_names[i], read_excel(files[i], sheet = 1, skip = 6))
 }

但是,如果我尝试将其保存在变量中,则只需保存最后一个文件

for (i in 1:length(files)){
 temp <- read_excel(files[i], sheet = 1, skip = 6)
}

【问题讨论】:

  • 我认为,它会保存最后一个,因为在循环的每次迭代中,它都会用同名temp 的下一个i 覆盖前一个i。看看之前的answer,它使用assign 功能完全符合您的要求。我认为 SO 上有很多这样的解决方案。
  • 提供了另一个更详细(但非常相似)的解决方案here

标签: r excel loops


【解决方案1】:

我会使用plyr

library(readxl)
library(plyr)
files <- list.files(".", "\\.xls")
data <- ldply(files, read_excel, sheet = 1, skip = 6)

如果您想添加带有文件名的列,您可以改为:

data <- ldply(files, function(fil) {
  data.frame(File = fil, read_excel(fil, sheet = 1, skip = 6))
}

【讨论】:

    【解决方案2】:

    我建议在 R 中使用列表环境,分配可能会很混乱,而且您无法使用 GET 确定值​​。

    应该是这样的:

    l <- list()
    
    for (i in 1:length(files)){
     l[[i]] <- read_excel(files[i], sheet = 1, skip = 6))
     }
    
    ltogether <- do.call("rbind",l)
    

    【讨论】:

    • 虽然我完全同意分配,但使用 lapply 或使用 l &lt;- vector("list", length(files)) 预分配正确大小的列表会更有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2021-10-29
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多