如何在R语言中将连续整数向量优雅划分为k个尽可能等长的分组?
实现方法
在R语言里有几种优雅的方式可以实现这个分组需求,以下是常用的方案:
1. 基础R:split() + gl()函数(推荐)
gl()函数能直接生成指定长度的分组因子,当总元素数无法被组数整除时,会自动把剩余元素依次分配到前面的组,保证分组尽可能等长,是最简洁的实现方式。
代码示例:
# 生成目标向量 vec <- 1:100 # 按要求拆分成分组 groups <- split(vec, gl(n = 7, k = 14, length = 100))
验证分组长度:
sapply(groups, length) # 输出结果:15 15 14 14 14 14 14
gl()参数说明:
n = 7:指定总组数k = 14:每个组的基础长度(100除以7的整数部分)length = 100:匹配向量总长度,剩余的100 - 7*14 = 2个元素会分配给前2个组,使它们的长度变为15。
2. 手动定义分组索引
如果需要更直观地控制每组长度,可以手动指定各组大小,再生成分组ID进行拆分:
vec <- 1:100 # 定义每组长度:前2组15个元素,后5组14个元素 group_lengths <- c(15, 15, rep(14, 5)) # 生成对应分组ID group_ids <- rep(1:7, group_lengths) # 拆分向量 groups <- split(vec, group_ids)
3. tidyverse 工具链(dplyr)
如果习惯使用tidyverse生态,可以用group_split()配合分组因子实现:
library(dplyr) tibble(value = 1:100) %>% mutate(group = gl(7, 14, 100)) %>% group_split(group, .keep = FALSE)
执行后会得到包含7个tibble的列表,每个tibble对应一组数据。
内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki
相关产品推荐
相关产品推荐

