【问题标题】:Importing multiple files into a single, merged data frame in R将多个文件导入到 R 中的单个合并数据框中
【发布时间】:2015-03-30 11:25:03
【问题描述】:

我在同一个目录中有 8 个 CSV 文件,需要将它们导入到 R 中的单个数据框中。它们都遵循相同的命名约定,“dataUK_1.csv”、“dataUK_2.csv”等,并且有列结构完全相同。

我已经成功地创建了一个包含所有文件名(包括完整目录)的向量:

files = list.files("/Users/iarwain/Data", pattern=".csv", full.names=T)

我只是不确定如何将这些名称传递给 read.csv 命令,以便它循环 8 次,导入每个文件并将其内容作为新行添加到单个数据框中,以便最终结果为一个包含 8 个 CSV 中所有数据行的数据框。

谢谢!

【问题讨论】:

标签: r file csv import


【解决方案1】:

你不想要一个循环。你想要lapply

file_list <- list.files("/Users/iarwain/Data", pattern=".csv", full.names=T)


combined_files <- do.call("rbind", lapply(file_list, read.csv))

翻译:对列表file_list中的每个项目应用函数read.csv。输出是一个列表。在所有输出上调用函数rbind,并将其分配给combined_files

【讨论】:

  • 出于某种原因,它提示我进行一些额外的输入(> 变成 +) - 即使我将文件更改为 file_list(我认为这是您在第二行中的意思)
  • 哦,天哪,我什至没有想到它只是一个缺少的支架,那是那些日子之一......非常感谢您的帮助!
【解决方案2】:

在 tidyverse 中,您只需添加一个管道和一个 map_df()

file_list <- list.files("/Users/iarwain/Data", pattern=".csv", full.names=T) %>%
    map_df(read_csv(.))

具体来说,正如 Hadley 所描述的 here(大约一半):

map_df(x, f) 实际上与do.call("rbind", lapply(x, f)) 相同,但在底层效率更高。

感谢 Jake Kaupp 将我介绍给 map_df() here

【讨论】:

    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2022-07-29
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多