第 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
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
我们也可以用match
df[, group_id := match(user, unique(user))]
说,我有一个 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
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
我们也可以用match
df[, group_id := match(user, unique(user))]