将数据拆分为CSV文件并使用R写入切片文件

时间:2016-09-14 13:34:11

标签: r

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

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文件写入磁盘。谁能建议我怎么做?

EDIT1:

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

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

2 个答案:

答案 0 :(得分:1)

循环中的write.csv正在尝试将列表写为.csv文件,而不是列表中的dataframe元素。

尝试:

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"))
}

答案 1 :(得分:1)

这是一个带有 lapplydata.table 的解决方案,它很快 - 即使对于大型数据集也是如此。通过将向量 my_file_rowschunk_size 设置的行号分割成 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"))

  })}