r - 第n组标签(仅计算新组的毕业生)

标签 r data.table partition-by

比如说,我有一个 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

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

最佳答案

的特殊符号 .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/

相关文章:

python - 如何通过网状结构在R中使用pandas编写csv?

r - 统计包中 "The grammar of graphics"的实现

Scala:在保留空值的情况下在 Window 上收集列表()

clojure:根据值的序列划分序列

r - igraph 创建加权邻接矩阵

r - 在组内计算值变化前后的值,为每个独特的转变生成新变量

r - 使用滚动连接通过引用更新

r - 在 R 中按组检查重叠开始和结束时间

sql-server - 如何在sql查询中的内连接和case语句上应用partition by和row_number()

r - 子集列出与列表名称相同的所有元素