下面是一个数据框(玩具示例),我想对其进行转换,以便组变为 1、1、2、2、3、3、3。
group y
C -1.55461160
C 0.34945015
A 0.57210825
A -0.88019528
H 0.03307085
H 1.13494754
H -1.65146164
我目前的解决方案是计算组数和每组记录数,并使用这两个部分重新创建组变量,即
ngroups <- length(unique(df$group))
npergroup <- aggregate(x = rep(1, nrow(df)), by = list(df$group), FUN = sum)$x
df <- df %>%
mutate(group = rep(1:ngroups, npergroup))
为了优雅起见,您是否有完整的dplyr解决方案?
一种可能是:
df %>%
mutate(group2 = cumsum(!duplicated(group)))
group y group2
1 C -1.55461160 1
2 C 0.34945015 1
3 A 0.57210825 2
4 A -0.88019528 2
5 H 0.03307085 3
6 H 1.13494754 3
7 H -1.65146164 3
或者您可以使用类似rleid()
函数:
df %>%
mutate(group2 = with(rle(group), rep(seq_along(lengths), lengths)))
如果您只想为“组”分配唯一 ID:
df %>%
mutate(group2 = group_indices(., group))
group y group2
1 C -1.55461160 2
2 C 0.34945015 2
3 A 0.57210825 1
4 A -0.88019528 1
5 H 0.03307085 3
6 H 1.13494754 3
7 H -1.65146164 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句