如何在data.table中基于d、k列分组生成组标签列a
解决方案:用data.table原生分组变量生成组编号
嘿,这个需求其实用data.table自带的分组机制就能轻松搞定,完全不用绕弯路~
首先看你的原始数据:
library(data.table) dat = data.table(d=c(1:3,1),k=c(3:1,3),f=1)
原始表输出:
d k f 1: 1 3 1 2: 2 2 1 3: 3 1 1 4: 1 3 1
你需要按d和k的组合分组,给每个唯一组合分配一个编号,重复的组合编号相同。直接用data.table的.GRP内置变量就能实现:
dat[, a := .GRP, by = .(d, k)]
运行这段代码后,就能得到你想要的结果:
d k f a 1: 1 3 1 1 2: 2 2 1 2 3: 3 1 1 3 4: 1 3 1 1
简单解释下:
by = .(d, k)指定了分组依据是d和k的组合.GRP是data.table在分组操作时自动生成的变量,会为每个唯一分组分配递增的序号- 把
.GRP赋值给新列a,就完成了组编号的生成——不管d、k的组合重复出现多少次,同一个组合都会得到相同的编号,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者wolfsatthedoor
相关产品推荐
相关产品推荐

