使用主键在 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
)
}
我有一个包含超过 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
)
}