我有个数据:
y <- c(3, 3, 3, 2, 2, 2, 2, 1, 1, 2)
z <- c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4)
df <- data.frame(y, z)
> df
y z
1 3 1
2 3 1
3 3 1
4 2 2
5 2 2
6 2 3
7 2 3
8 1 3
9 1 4
10 2 4
现在我想要创建一个组id。这些组是基于y的,应该从1编号到n。重复数y指的是一个组。另外,这些群是基于z嵌套在其他群中的,因此,如果y在z处处于不同的群中,则y的等号表示不同的群,这意味着:y有6个群,对于z4群。其结果应是:
> df
y z group_id
1 3 1 1
2 3 1 1
3 3 1 1
4 2 2 2
5 2 2 2
6 2 3 3
7 2 3 3
8 1 3 4
9 1 4 5
10 2 4 6
任何帮助我都很高兴。
发布于 2018-10-25 17:00:10
您可以从rleid
包中使用data.table
-
df$group_id <- data.table::rleid(paste(df$y, df$z))
df
y z group_id
1 3 1 1
2 3 1 1
3 3 1 1
4 2 2 2
5 2 2 2
6 2 3 3
7 2 3 3
8 1 3 4
9 1 4 5
10 2 4 6
发布于 2018-10-25 17:00:54
我们可以使用来自rleid
的data.table
library(data.table)
setDT(df)[, group_id := rleid(y, z)]
https://stackoverflow.com/questions/52994372
复制相似问题