使用主键在 R 中创建大小相等的块

Creating chunks of equal size in R using the primary key

我有一个包含超过 2000 万条记录的数据框。我创建了块,这样我就可以将小集加载到多个 csv 文件中。该代码正在运行,它正在创建 n 个大小相等的 csv 文件。

这是我使用的代码:

n = 14 # defining the number of chunks
 
df = split(df_t3, factor(sort(rank(row.names(df))%%n))) # breaking into 14 list

lapply(names(df), function(x){
   write.csv(df[[x]], paste(x, ".txt", sep = ""), row.names = FALSE) #creating csv files
})

我想修改这个,这样每个块在断开文件之前捕获与同一 ID 相关的整个记录​​集。

例如 ID10 = 300 行,ID 20 = 500 行。在跳入下一个块之前,文件应该捕获整个 300 条记录。我有超过 1 毫米的 ID,因此不能使用 ID 作为分成块的标准。

不确定我的要求是否真的很清楚。很高兴提供更清晰的信息。谢谢

如果您的 ID 甚至接近平衡,我会分成几块,每个块的 ID 数量大致相同。像这样:

ids = unique(df_t3$ID)
n_chunks = 14
id_chunk = ceiling(seq(1e-5, n_chunks, length.out = length(ids)))

for(i in seq_len(n_chunks)) {
  write.csv(
    df_t3[df_t3$ID %in% ids[id_chunk == i], ],
    file = paste0("chunk", i, ".csv"),
    row.names = FALSE
  )
}