将多个文件导入 R 中的单个合并数据框
Importing multiple files into a single, merged data frame in R
我有 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 的所有数据行。
谢谢!
您不需要循环。你想要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
在 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)
is effectively the same as do.call("rbind", lapply(x, f))
but under the hood is much more efficient.
感谢 Jake Kaupp 向我介绍 map_df()
。
我有 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 的所有数据行。
谢谢!
您不需要循环。你想要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
在 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)
is effectively the same asdo.call("rbind", lapply(x, f))
but under the hood is much more efficient.
感谢 Jake Kaupp 向我介绍 map_df()