You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:将数据框分割为含连续不重叠类型组的子组

问题描述

需要将R数据框按连续2个互不重叠的Type分割成子组,各组行数不固定。示例数据如下:

df <- data.frame(ID=c('1','1','1','1','1','1','1'), Type=c('a','a','b','c','c','d','d'), value=c(10,2,5,3,7,3,9))

期望输出:

  • 子组1包含Type a和b
  • 子组2包含Type c和d
解决方案

可以通过给每个Type分配分组标识,再按标识分割数据框来实现:

# 获取唯一的Type序列
unique_types <- unique(df$Type)
# 给每个Type分配分组ID:每2个连续Type归为一组
group_ids <- as.integer(gl(length(unique_types), 2))
# 建立Type到分组ID的映射
type_group_map <- setNames(group_ids, unique_types)
# 为原数据框添加分组列
df$group <- type_group_map[df$Type]
# 按分组列分割数据框
split_result <- split(df, df$group)

# 查看结果
split_result[[1]]
split_result[[2]]

代码说明

  1. unique(df$Type)提取数据中所有不重复的Type,得到顺序为c("a","b","c","d")的向量;
  2. gl(length(unique_types), 2)生成重复的分组编号:前2个Type对应组1,接下来2个对应组2,以此类推。如果Type总数是奇数,最后一个Type会单独成为一组;
  3. setNames建立Type和分组ID的对应关系,方便后续给原数据框打标记;
  4. split(df, df$group)根据分组列将数据框拆分成多个子数据框,结果是一个列表,每个元素对应一个子组。

如果需要移除结果中的group列,可以在分割后用lapply处理:

split_result_clean <- lapply(split_result, function(x) x[, !names(x) %in% "group"])

内容的提问来源于stack exchange,提问作者mkmor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:40:47