将多个文件导入R中的单个合并数据帧

时间:2015-01-30 21:46:49

标签: r file csv import

我有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中所有数据行的数据框。

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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


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

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

答案 1 :(得分:1)

在tidyverse中,你可以添加一个管道和一个map_df()

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

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

  

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

感谢Jake Kaupp向我介绍map_df() here