基于列位置拆分dataframe为分组子表的tidyverse实现求助
实现方案(tidyverse生态)
以下代码可实现按指定列数拆分数据集为嵌套子tibble,可直接适配你的需求:
library(tidyverse) # 1. 定义每组的列数,你的实际业务场景改成6即可 col_per_group <- 3 # 2. 执行拆分,得到嵌套tibble split_result <- mtcars %>% as_tibble() %>% { # 生成列索引的分组规则 col_seq <- seq_along(.) col_groups <- split(col_seq, ceiling(col_seq / col_per_group)) # 按分组提取对应列生成子tibble map(col_groups, ~ pick(all_of(.x))) } %>% # 转换为结构化的嵌套tibble,可直接用于后续批量处理 enframe(name = "分组编号", value = "子数据集")
结果说明
输出的split_result是一个两层结构的tibble:
- 每行对应一个分组,
分组编号按列的顺序从1开始递增 子数据集列的每个元素都是对应分组的独立tibble,保留原数据集的全部行数据- 你自己的66列数据集只需将
col_per_group改为6,即可自动生成11个每组6列的子数据集
原代码问题说明
- 之前使用的
group_by(across())逻辑是按行的数值分组,不是按列的位置拆分,和需求完全不匹配 pivot_longer的写法只选中了前3列,也没有配置列分组的拆分规则,因此无法覆盖全量列生成对应分组
内容的提问来源于stack exchange,提问作者James Crumpler
相关产品推荐
相关产品推荐

