按组添加 id,在 R 中重置为 1

Pet*_*900 1 r

我确信这一定是一个骗局,但我就是无法让它发挥作用。我想向数据框中添加 ID 列,对于一列中的每个唯一值,该列重置为 1。最好的描述方式是举例:

gr1 <- c("A","A","A","B","B","B")
gr2 <- c(1,1,2,3,4,4)

df <- data.frame(gr1, gr2)
Run Code Online (Sandbox Code Playgroud)

期望的输出:

id <- c(1,1,2,1,2,2)
df <- cbind(df, id)
Run Code Online (Sandbox Code Playgroud)

id 标记 gr1 的每个子集中 gr2 的唯一值。当 gr1 从 A 更改为 B 时,id 重置为 1。我已阅读此内容(基于两列 R 分配 ID),但这不是我想要的。我不想添加排名函数(我认为),因为我希望我的领带在 gr1 中都具有相同的 id,例如

df2 <- df %>% group_by(gr1) %>% mutate(id=rank(gr2, ties.method="max")) 
Run Code Online (Sandbox Code Playgroud)

把我的头撞到墙上。任何指示都会有很大的帮助。

mto*_*oto 5

?rleid我们可以从包装中使用data.table

library(data.table)
setDT(df)[, id := rleid(gr2), by = gr1]
> df
   gr1 gr2 id
1:   A   1  1
2:   A   1  1
3:   A   2  2
4:   B   3  1
5:   B   4  2
6:   B   4  2
Run Code Online (Sandbox Code Playgroud)