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

基于appln_id出现次数生成numorder列的dplyr实现技术问询

用dplyr为数据框生成分组内出现顺序编号

嘿,这个需求用dplyr的窗口函数就能轻松解决!你要的就是给每个appln_id分组内的行按出现顺序标记1、2、3...对吧?直接用group_by() + row_number()的组合就完美匹配你的需求。

先还原你的示例数据

# 示例数据的dput输出
mini <- structure(list(
  appln_id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2),
  numberclass = c(558L, 558L, 558L, 558L, 558L, 88L, 282L, 282L, 282L, 282L),
  weight = c(0.1, 0.1, 0.1, 0.1, 0.1, 0.00435816993464052, 0.00435816993464052, 0.00435816993464052, 0.00435816993464052, 0.00435816993464052 ),
  order = 1:10
), row.names = c(NA, -10L), class = c("data.table", "data.frame"))

生成numorder列的核心代码

# 加载dplyr包
library(dplyr)

# 生成目标列
mini_with_numorder <- mini %>%
  group_by(appln_id) %>%  # 按appln_id分组
  mutate(numorder = row_number()) %>%  # 分组内生成连续序号
  ungroup()  # 可选:后续不需要分组操作时取消分组,避免意外问题

# 查看结果
print(mini_with_numorder)

代码逻辑说明

  • group_by(appln_id):将数据按appln_id拆分,同一个appln_id的所有行归为一组
  • mutate(numorder = row_number()):在每个分组内部,为每行生成从1开始的递增序号,完全对应行的原始出现顺序
  • ungroup():如果后续不需要基于分组进行操作,建议取消分组状态,防止后续代码出现非预期的分组行为

运行后生成的numorder列和你提供的示例完全一致:appln_id=1的5行标记1-5,appln_id=2的5行标记1-5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:57:39