![](/img/trans.png)
[英]Read in large CSV file in R and export as multiple RData files using number of rows and skip
[英]Read multiple csv files (and skip 2 columns in each csv file) into one dataframe in R?
我有一个包含大约 100 个 csv 文件的文件夹,我想将它们读入 R 中的一个数据帧。我知道如何执行此操作,但我必须跳过每个 csv 文件中的前两列,这就是我被卡住的部分在。 到目前为止我的代码是:
myfiles <- list.files(pattern = ".csv") # create a list of all csv files in the directory
data_csv <- ldply(myfiles, read.csv)
感谢您的任何帮助
使用data.table
包函数fread()
和rbindlist()
将比任何其他base
或tidyverse
替代方案更快地提供您想要的结果。
library(data.table)
## Create a list of the files
FileList <- list.files(pattern = ".csv")
## Pre-allocate a list to store all of the results of reading
## so that we aren't re-copying the list for each iteration
DTList <- vector(mode = "list", length = length(FileList))
## Read in all the files, excluding the first two columns
for(i %in% seq_along(DTList)) {
DTList[[i]] <- data.table::fread(FileList[[i]], drop = c(1,2))
}
## Combine the results into a single data.table
DT <- data.table::rbindlist(DTList)
## Optionally, convert the data.table to a data.frame to match requested result
## Though I would recommend looking into using data.table instead!
data.table::setDF(DT)
这是使用 purrr 的一种方法。 您可以使用基本 lapply 函数执行基本相同的语法。 下面使用的map_dfr
函数使用矢量化应用read.csv
或fread
。 它还有一个很好的功能,可以同时将数据帧(按行)绑定在一起,为您提供单个数据帧。
library(purrr)
myfiles <- list.files(pattern = ".csv") # create a list of all csv files in the directory
data_csv <- map_dfr(myfiles, ~read.csv(.x)[,-c(1,2)])
并从 Matt 的回答中记下,您可以使用fread
和矢量化更快:
myfiles <- list.files(pattern = ".csv") # create a list of all csv files in the directory
data_csv <- map_dfr(myfiles, ~data.table::fread(.x, drop = c(1,2))
如果你想走得非常快,你总是可以与furrr
包并行。
library(purrr)
library(furrr)
# sets up the workers
plan("multisession")
myfiles <- list.files(pattern = ".csv") # create a list of all csv files in the directory
data_csv <- future_map_dfr(myfiles, ~data.table::fread(.x, drop = c(1,2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.