R语言如何将data.frame按每2列一组拆分为多个小data.frame
R 按固定列数拆分data.frame实现方案
方法1:纯基础R实现(无需额外依赖包)
直接通过列索引分组即可实现,代码如下:
# 生成列分组标识,默认适配列数可被split_col整除的场景 col_groups <- rep(1:(ncol(x)/split_col), each = split_col) # 按分组拆分列,生成结果列表 results <- lapply(split(seq_len(ncol(x)), col_groups), function(idx) x[, idx, drop = FALSE])
如果需要兼容列数无法被split_col整除的场景,可以调整分组标识生成逻辑:
# 兼容任意列数场景,不足split_col列的最后一组会保留剩余所有列 col_groups <- ceiling(seq_len(ncol(x)) / split_col) results <- lapply(split(seq_len(ncol(x)), col_groups), function(idx) x[, idx, drop = FALSE])
drop = FALSE的作用是避免单组只有1列时,R自动将data.frame转为向量,保证所有返回结果都是data.frame格式。
方法2:purrr 实现(适合tidyverse技术栈用户)
如果日常习惯使用tidyverse生态的工具,可以用purrr的map函数实现:
library(purrr) results <- map(seq(1, ncol(x), by = split_col), function(start_col) { end_col <- min(start_col + split_col -1, ncol(x)) x[, start_col:end_col, drop = FALSE] })
两种实现得到的results列表完全符合需求:results[[1]]对应前2列,results[[2]]对应第3-4列,以此类推。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

