【问题标题】:Reading Many CSV Files at the Same Time in R and Combining All into one dataframe在 R 中同时读取多个 CSV 文件并将所有文件合并到一个数据帧中
【发布时间】:2016-05-28 19:22:03
【问题描述】:

我有 20 个 .CSV 文件,它们都具有相同数量的行/列(1 行和 42 列)。我想从所有这些中创建一个数据框,并将每个 CSV 文件作为我的数据框的一行,并将 CSV 文件的名称作为我的行名。甚至有可能做到这一点吗?

用一个例子来说明这一点:

A.csv
10 21 32 45

B.csv
33 45 93 90

C.csv
12 93 Na 21

我正在寻找的结果数据框是:

A 10 21 32 45
B 33 45 93 90
C 12 93 Na 21

【问题讨论】:

  • 如果你给了-1,请清楚说明原因。
  • 我没有,但在 SO 上可能有超过 30 条问答。请尽一些最小的努力。

标签: r dataframe


【解决方案1】:

data.table (rbindlist) 和 dplyr (bind_rows) 都有执行此操作的功能。我首选的解决方案是使用readr::read_csvdplyr::bind_rows 来执行此操作:

library(readr)
library(dplyr)

bind_rows(
  lapply(
    list.files(
      "path/to/csv_files", 
      pattern = ".csv", 
      full.names = TRUE
    ), 
    read_csv, 
    header = FALSE, 
    na_strings = c("Na")
  )
)

【讨论】:

    【解决方案2】:

    您可以尝试使用list.files() 函数结合lapply 循环遍历所有文件并将它们作为data.frame 读取。最后,do.call(rbind ... 将单独的数据帧组合在一起:

    do.call(rbind, lapply(list.files(PathToCsvFile, pattern = ".csv", full.names = T), read.csv))
    

    更新

    filePaths <- list.files(PathToCsvFile, pattern = ".csv", full.names = T)
    cbind(gsub(".csv", "", basename(filePaths)), do.call(rbind, lapply(filePaths, read.csv)))
    

    【讨论】:

    • 感谢您的回答。但由于某种原因,这不起作用并显示错误:Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file 'D38hz6lVkkxE.csv': No such file or directory 我检查了文件,它工作正常且没有损坏。
    • PathToCsvFile 应该是您的 csv 文件所在的目录。
    • 你可能需要full.names = TRUE in list.files()
    • 这正是我所做的,看起来它可以访问目录并找到该文件夹​​中第一个文件的名称,我将目录写为"C:/Documents/CSVs"
    • 采纳@RichardScriven 的建议,在list.files() 函数中指定full.names = T
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2017-07-11
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多