在R中同时读取多个CSV文件并将所有CSV文件合并为一个数据帧

时间:2016-05-28 19:22:04

标签: r dataframe

我有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

2 个答案:

答案 0 :(得分:3)

data.tablerbindlist)和dplyrbind_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")
  )
)

答案 1 :(得分:2)

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

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

<强> Upadate

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