我有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
答案 0 :(得分:3)
data.table
(rbindlist
)和dplyr
(bind_rows
)都有执行此操作的功能。我首选的解决方案是将readr::read_csv
与dplyr::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)))