第 n 组标签(只计算新组的毕业生)

nth group labelling (count only graduates with new group)

说,我有一个 df:

df <- data.table(user = c('a', 'a', 'b')
                 ); df

user
 a
 a
 b

我想在 user 级别创建一个新专栏 group_id

user group_id
 a        1
 a        1
 b        2

有没有快速/可扩展的方式?我可以通过连接来做到这一点(并且理解 data.table 使用连接很快)但想知道是否有更简单、更快的方法。 假设我有大约 1e8 行并且该方法将应用于组中的多个列(在示例中只有 1 个,即 user

我已经开始:

df[, step_1 := as.integer(duplicated(df))]; df

user step_1
 a      0
 a      1
 b      0

但不知道下一步是什么,我也不确定这是否是正确的方向。谢谢。

将用户转换为因素。然后将其转换为整数以提取因子使用的基础代码。

df[, group_id := as.integer(factor(user))]
df
##    user group_id
## 1:    a        1
## 2:    a        1
## 3:    b        2

的特殊符号 .GRP 也适用于多个分组列

df[, group_id := .GRP, by = user][]
user group_id
   a        1
   a        1
   b        2

或者,可以使用 rleid() 函数,但这需要数据集按完全相同的列排序:

df[order(user), group_id := rleid(user)][] 
   user group_id
1:    a        1
2:    a        1
3:    b        2

我们也可以用match

df[, group_id := match(user, unique(user))]