比如说,我有一个 df
:
df <- data.table(user = c('a', 'a', 'b')
); df
user
a
a
b
我正在创建一个新专栏,group_id
,位于user
级别:
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
但不知道下一步是什么,也不确定这是否是正确的方向。谢谢。
最佳答案
data.table的特殊符号 .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
关于r - 第n组标签(仅计算新组的毕业生),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69586920/