我确信这一定是一个骗局,但我就是无法让它发挥作用。我想向数据框中添加 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)
把我的头撞到墙上。任何指示都会有很大的帮助。
?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)