【问题标题】:Read in large CSV file in R and export as multiple RData files using number of rows and skip在 R 中读取大型 CSV 文件并使用行数导出为多个 RData 文件并跳过
【发布时间】:2015-02-13 22:00:21
【问题描述】:

我正在尝试分段导入和导出一个 10GB 的 CSV 文件,其中包含大约 1000 万个观察值。最后我想要大约 10 个可管理的 RData 文件(data_1.RDatadata_2.Rdata 等),但我无法使 skipnrows 动态化。我的nrows 永远不会改变,因为每个数据集我需要近 100 万个数据集,但我想我需要为 skip= 提供一些等式,这样每个循环都会增加以捕获接下来的 100 万行。此外,拥有header=T 可能会弄乱ii=1 之上的任何内容,因为只有第一行将包含变量名。以下是我正在使用的大部分代码:

for (ii in 1:10){
      data <- read.csv("myfolder/file.csv", 
                         row.names=NULL, header=T, sep=",", stringsAsFactors=F,
                         skip=0, nrows=1000000)
      outName <- paste("data",ii,sep="_")
      save(data,file=file.path(outPath,paste(outName,".RData",sep="")))

    }

【问题讨论】:

  • 创建一个包含要跳过的行数的向量,并使用您的[ii]对其进行索引?

标签: r csv for-loop export rdata


【解决方案1】:

(未经测试,但是...)您可以尝试以下方法:

nrows <- 1000000
ind <- c(0, seq(from = nrows, length.out = 10, by = nrows) + 1)
header <- names(read.csv("myfolder/file.csv", header = TRUE, nrows = 1))

for (i in seq_along(ind)) {
  data <- read.csv("myfolder/file.csv", 
                   row.names = NULL, header = FALSE, 
                   sep = ",", stringsAsFactors = FALSE,
                   skip = ind[i], nrows = 1000000)
  names(data) <- header
  outName <- paste("data", ii, sep = "_")
  save(data, file = file.path(outPath, paste(outName, ".RData", sep = "")))
}

【讨论】:

  • 感谢您的帮助,阿南达!一位同事还简单地建议使用像 CSV Splitter 这样的外部程序在 R 之外快速完成这个技巧以节省资源,所以我可能应该首先想到这一点。不管你的建议很有帮助!
  • @Foxer,还请查看fread 以比使用read.csv 更快地读取数据。
猜你喜欢
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多