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

基于其他列在分组内为唯一值分配编号(R语言)

问题分析与解决方案

你的代码错误点

  • 排序操作未生效:my_data[order(my_data$group_1, my_data$var_1),]仅生成临时排序后的数据集,但未将结果赋值给变量,后续逻辑完全没用到这个排序结果。
  • 错误使用cur_group_id():这个函数是给整个分组分配ID,而非针对分组内var_1的唯一值分配标识,导致同一分组下所有行的ID完全相同,不符合需求。

正确实现代码

使用dplyr的dense_rank()函数,它会在分组内为var_1的相同值分配相同排名,不同值按升序生成连续排名,再拼接成gX格式的标识:

library(dplyr)

my_data %>%
  group_by(group_1) %>%
  mutate(var_2 = paste0("g", dense_rank(var_1))) %>%
  ungroup() # 可选,取消分组状态,方便后续操作

执行后输出结果:

# A tibble: 6 × 4
     id group_1 var_1 var_2
  <dbl> <chr>   <dbl> <chr>
1     1 a          12 g1
2     2 a          32 g2
3     3 b          14 g1
4     4 b          17 g2
5     5 b          14 g1
6     6 b          18 g3

如果需要先对分组内的var_1进行升序排序,再生成标识(dense_rank本身已按值升序处理,此步骤可选),可以添加arrange操作:

my_data %>%
  group_by(group_1) %>%
  arrange(var_1, .by_group = TRUE) %>%
  mutate(var_2 = paste0("g", dense_rank(var_1))) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:35:18