将多个CSV文件读入单独的数据框架中

48
假设我们有目录 C:\R\Data 中的文件 file1.csvfile2.csv,...,file100.csv,并且我们希望将它们全部读入单独的数据框(例如 file1file2,...,file100)。
之所以这样做是因为尽管它们具有相似的名称,但它们具有不同的文件结构,因此将它们放在一个列表中并不太有用。
我可以使用 lapply,但这会返回包含 100 个数据框的单个列表。 相反,我希望将这些数据框放在全局环境中。
如何直接将多个文件读入全局环境?或者,如何将数据框列表的内容解压缩到其中?

5
请看我给@hadley的评论。请注意,我并没有问“将X个文件读入R的最佳方法是什么?”我的问题更具体,有其原因。我想我不应该说我想读取100个文件(只是试图概括),而是8个具有类似名称的不同文件。但是这里有太多人摆出高姿态。 - Fred
1
对于偶然发现这篇文章并且有一组100个结构相同(或几乎相同)的文件的人来说,最好的方法是按照Hadley和Joran在下面解释的方式将数据读入命名列表中。另外,可以看看Gregor对此帖子的回复,了解为什么这样做是有益的。 - lmo
如果它们是完全不同的结构,如何在循环中读取它们有帮助呢?无论如何它们都需要由单独的代码处理!—只需将它们分开阅读。 - Konrad Rudolph
11个回答

-1
使用list.filesmap_dfr来读取多个csv文件。
df <- list.files(data_folder, full.names = TRUE) %>%
    map_dfr(read_csv)

可重现的示例

首先将样本csv文件写入临时目录。 这比我想象的要复杂。

library(dplyr)
library(purrr)
library(purrrlyr)
library(readr)
data_folder <- file.path(tempdir(), "iris")
dir.create(data_folder)
iris %>%
    # Keep the Species column in the output
    # Create a new column that will be used as the grouping variable
    mutate(species_group = Species) %>%
    group_by(species_group) %>%
    nest() %>%
    by_row(~write.csv(.$data,
                      file = file.path(data_folder, paste0(.$species_group, ".csv")),
                      row.names = FALSE))

将这些csv文件读入一个数据框中。 请注意,物种列必须存在于csv文件中,否则我们将失去该信息。

iris_csv <- list.files(data_folder, full.names = TRUE) %>%
    map_dfr(read_csv)

问题是如何将所有文件作为单独的数据框读取,而不是一个数据框。 - Jas
1
@jas 谢谢。没错。我把这个答案移到了一个新的问题和答案中,名为如何在R中将多个csv文件读入单个数据框中 - Paul Rougieux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接