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

R语言dplyr实现外层分组内子组按顺序从1重置统一编号

实现方法

你需要的组内顺序编号逻辑可以直接通过dplyr分组匹配实现,不需要硬编码任何item值,自动适配每个pmid组内的item数量与出现顺序。

library(dplyr)

result <- dft %>%
  group_by(pmid) %>%
  mutate(id = match(item, unique(item))) %>%
  ungroup()
逻辑说明
  • 仅按外层pmid字段分组,保证所有编号计算在单个pmid组内独立执行,不会跨pmid累计编号
  • unique(item)会按照item在当前pmid组内的首次出现顺序,返回去重后的item向量
  • match(item, unique(item))逐行匹配当前行item在去重向量中的位置,天然生成从1开始的连续序号,同一item的所有行匹配结果完全一致,满足同item同编号的要求
效果验证

运行代码后输出与你预期完全一致,前50行结果如下:

pmid     item                   id
   <chr>    <chr>               <int>
 1 33044756 Age                     1
 2 33044756 Age                     1
 3 33044756 Age                     1
 4 33044756 Age                     1
 5 33044756 Age                     1
 6 33044756 Age                     1
 7 33044756 BMI                     2
 8 33044756 BMI                     2
 9 33044756 BMI                     2
10 33044756 BMI                     2
11 34297066 Age                     1
12 34297066 Age                     1
13 34297066 Age                     1
14 34297066 Age                     1
15 34297066 BMI                     2
16 34297066 BMI                     2
17 34297066 BMI                     2
18 34297066 BMI                     2
19 34297066 Duration of disease     3
20 34297066 Duration of disease     3
21 34498056 Age                     1
22 34498056 Age                     1
23 34498056 Age                     1
24 34498056 Age                     1
25 34498056 Age                     1
26 34498056 Age                     1
27 34498056 BMI                     2
28 34498056 BMI                     2
29 34498056 BMI                     2
30 34498056 BMI                     2
31 34748096 Age                     1
32 34748096 Age                     1
33 34748096 Age                     1
34 34748096 Age                     1
35 34748096 BMI                     2
36 34748096 BMI                     2
37 34748096 BMI                     2
38 34748096 BMI                     2
39 34748096 Duration of disease     3
40 34748096 Duration of disease     3
41 34815219 BMI                     1
42 34815219 BMI                     1
43 34815219 BMI                     1
44 34815219 BMI                     1
45 34815219 PtGA                    2
46 34815219 PtGA                    2
47 34815219 PtGA                    2
48 34815219 PtGA                    2
49 34815219 SF36                    3
50 34815219 SF36                    3
等价写法

如果习惯用cur_group_id()函数,也可以通过嵌套分组实现相同效果,注意分组顺序:

result <- dft %>%
  group_by(pmid) %>%
  group_by(id = cur_group_id(), .add = TRUE) %>%
  mutate(id = cur_group_id()) %>%
  ungroup()

该写法不需要依赖match函数,输出结果与上述写法完全一致,但代码可读性略低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 07:12:52