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

R语言dataframe如何按problem分组为多item组分配连续序号

R语言实现分组顺序编号方案

核心实现逻辑

  • 先按problem字段分组,统计每个分组下的item条目总数
  • 筛选出条目数大于1的有效分组,按照分组在原数据中首次出现的顺序生成从1开始的连续编号
  • 单条目分组直接赋值NA,编号过程自动跳过这些分组,不占用序号位
  • 按需调整problem字段的展示格式,和预期输出对齐

dplyr 实现(代码可读性高)

library(dplyr)

# 示例输入数据
df1 <- data.frame(problem = c(1,1,2,3,3,3,4),
                  item = c("a1","a2","a3","b1","b2","b11","c1"))

df2 <- df1 %>%
  group_by(problem) %>%
  # 统计组内条目数,记录原始分组顺序
  mutate(item_cnt = n(),
         raw_group_id = cur_group_id()) %>%
  ungroup() %>%
  mutate(
    # 标记多item的有效分组
    valid_id = ifelse(item_cnt > 1, raw_group_id, NA),
    # 将有效分组的原始ID映射为连续序号
    assign = match(valid_id, sort(unique(na.omit(valid_id)))),
    # 调整problem字段格式
    problem = paste("Problem", problem)
  ) %>%
  select(problem, item, assign)

运行后输出结果和预期完全一致:

> df2
# A tibble: 7 × 3
  problem   item  assign
  <chr>     <chr>  <int>
1 Problem 1 a1         1
2 Problem 1 a2         1
3 Problem 2 a3        NA
4 Problem 3 b1         2
5 Problem 3 b2         2
6 Problem 3 b11        2
7 Problem 4 c1        NA

Base R 实现(无第三方依赖)

不需要加载任何扩展包,原生R代码即可完成需求:

# 示例输入数据
df1 <- data.frame(problem = c(1,1,2,3,3,3,4),
                  item = c("a1","a2","a3","b1","b2","b11","c1"))

# 统计每个分组的条目数
group_count <- table(df1$problem)
# 提取多item分组,按出现顺序生成连续编号
multi_item_groups <- names(group_count[group_count > 1])
group_index <- setNames(seq_along(multi_item_groups), multi_item_groups)

# 生成结果表
df2 <- df1
df2$assign <- as.numeric(group_index[as.character(df2$problem)])
df2$problem <- paste("Problem", df2$problem)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:51:20