问题 更快地将多个csv读取到一个数据帧?


反正有没有加快R中的以下过程?

theFiles <- list.files(path="./lca_rs75_summary_logs", full.names=TRUE, pattern="*.summarylog")

listOfDataFrames <- NULL
masterDataFrame <- NULL

for (i in 1:length(theFiles)) {
    tempDataFrame <- read.csv(theFiles[i], sep="\t", header=TRUE)
    #Dropping some unnecessary row
    toBeRemoved <- which(tempDataFrame$Name == "")
    tempDataFrame <- tempDataFrame[-toBeRemoved,]
    #Now stack the data frame on the master data frame
    masterDataFrame <- rbind(masterDataFrame, tempDataFrame)
}

基本上,我正在读取目录中的多个csv文件。我想通过堆叠行将所有csv文件合并到一个巨大的数据框中。随着masterDataFrame的大小增加,循环似乎更长。我在linux集群上这样做。


10843
2018-04-11 22:51


起源



答案:


更新了答案 data.table::fread

require(data.table)
out = rbindlist(lapply(theFiles, function(file) {
         dt = fread(file)
         # further processing/filtering
      }))

fread() 自动检测标题,文件分隔符,列类,默认情况下不将字符串转换为因子..处理嵌入式引号,是相当快的等等。 ?fread 更多。


查看旧答案的历史记录。


13
2018-04-11 22:55



谢谢。 rbindlist确实加快了速度! - WonderSteve
使用 fread 代替 read.csv 如果你要沿着data.table路径.... - mnel


答案:


更新了答案 data.table::fread

require(data.table)
out = rbindlist(lapply(theFiles, function(file) {
         dt = fread(file)
         # further processing/filtering
      }))

fread() 自动检测标题,文件分隔符,列类,默认情况下不将字符串转换为因子..处理嵌入式引号,是相当快的等等。 ?fread 更多。


查看旧答案的历史记录。


13
2018-04-11 22:55



谢谢。 rbindlist确实加快了速度! - WonderSteve
使用 fread 代替 read.csv 如果你要沿着data.table路径.... - mnel