拆分 CSV 文件中的数据并使用 R 切片写入文件

Split up data in CSV file and writing to a file in slices using R

我在 CSV 文件中有一个包含 956,678 行的数据。以下代码读取文件并在 R 中将数据分组(每组有 65,000 行,其余行转到最后一组)。

my_file <- read.csv("~myfile_path/file.csv")
grps <- (split(my_file, (seq(nrow(my_file))-1) %/% 65000))
for (i in grps)
{
write.csv(grps, paste("path/output_file", i, ".csv", sep=""))
}

现在,我想将这些组作为 CSV 文件写入磁盘。谁能建议我怎么做?

编辑 1:

根据评论,我修改了代码并得到以下错误:

Error in data.frame(0 = list(nih_addr_id = c(664L, 665L, 666L, 667L, : arguments imply differing number of rows: 65000, 46677

循环中的 write.csv 试图将列表写入 .csv 文件,而不是列表的数据框元素。

尝试:

my_file <- read.csv("~myfile_path/file.csv")
grps <- (split(my_file, (seq(nrow(my_file))-1) %/% 65000))
for (i in seq_along(grps)) {
    write.csv(grps[[i]], paste0("path/output_file", i, ".csv"))
}

这是一个使用 lapplydata.table 的解决方案,速度很快 - 即使对于大型数据集也是如此。通过按 chunk_size 设置的行号将向量 my_file_rows 分成 65k 的块来对文件进行分块。使用 split 函数会自动处理余数。您可以根据自己的喜好调整 chunk_size 中的数字,轻松调整行数。此解决方案通过粘贴 x[1].

将每个块的起始行号粘贴到文件名中
  my_file_rows <- seq(1, nrow(my_file))
  chunk_size <- 65e3

  lapply(split(my_file_rows, ceiling(my_file_rows/chunk_size)), function(x){

    fwrite(my_file[x,], paste0("path/output_file", x[1], ".csv"))

  })}