R data.table下快速生成用户层级group_id的可扩展方法求助
最优解决方案
直接用data.table内置的.GRP分组标识变量即可,这是原生C语言优化的功能,处理亿级数据性能拉满,且天然支持单列/多列分组场景,不需要额外写join逻辑。
示例代码:
# 单user列分组场景 df[, group_id := .GRP, by = user] # 后续多列分组直接修改by参数即可,例如按user、type两列分组 # df[, group_id := .GRP, by = .(user, type)]
运行后直接生成你需要的连续递增分组ID,不需要任何中间过渡变量。
你现有思路的修正方案(不推荐大数量使用)
你用duplicated的思路逻辑上是可行的,但性能远低于.GRP,仅做参考:
df[, group_id := cumsum(!duplicated(user))]
该写法仅支持单列分组,多列场景需要额外调整去重判断逻辑,亿级数据下执行效率比.GRP低30%以上,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者Sweepy Dodo
相关产品推荐
相关产品推荐

