基于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
相关产品推荐
相关产品推荐

