如何将列表中存储的多个data.frame按对应参数自动切分为等份
R多data.frame批量按指定份数切分实现方案
原有代码问题
seq_along(n[[1]])获取的是data.frame的列索引而非行索引,按行切分需要使用seq(nrow(df))生成行号序列- 直接传入整个
parts向量计算,无法和每个data.frame的切分份数一一对应
实现代码
使用mapply实现列表元素和切分份数的一一对应批量处理,可兼容最多200个甚至更多data.frame的场景:
# 你的原始数据生成代码 tzu <- c(1:110) tzu1 <- c(1:110) df1 <- data.frame(tzu, tzu1) atu <- c(1:120) atu1 <- c(1:120) df2 <- data.frame(atu, atu1) n <- list(df1, df2) # 切分份数向量,长度和n的长度保持一致即可 parts <- c(11,12) # 核心批量切分代码 split_result <- mapply(function(current_df, split_count) { row_seq <- seq(nrow(current_df)) split(current_df, ceiling(row_seq / split_count)) }, current_df = n, split_count = parts, SIMPLIFY = FALSE)
结果使用说明
split_result是和n长度相同的列表,split_result[[i]]对应第i个data.frame切分后的子列表- 取第一个data.frame的第3份:
split_result[[1]][[3]] - 取第二个data.frame的第10份:
split_result[[2]][[10]]
效果验证
# 验证第一个df切分结果:共11份,每份10行 length(split_result[[1]]) # 输出 11 nrow(split_result[[1]][[1]]) # 输出 10 # 验证第二个df切分结果:共12份,每份10行 length(split_result[[2]]) # 输出 12 nrow(split_result[[2]][[1]]) # 输出 10
内容的提问来源于stack exchange,提问作者Selina1
相关产品推荐
相关产品推荐

