我在 R 中有一个这样的数据框:
data.frame('first' = c('A','A','B','C','A','B'),
'second' = c(1,2,1,1,1,1),
'third' = c(1,2,1,1,1,3))
first second third
1 A 1 1
2 A 2 2
3 B 1 1
4 C 1 1
5 A 1 1
6 B 1 3
7 B 2 1
第一列中的每个字母我想对该行进行编号。对于每个唯一的第二列和第三列,如果已经注意到第一列,则数字会增加。如果第一列发生变化,它将转到另一个编号顺序。所以最终会是这样的:
first second third group
1 A 1 1 1
2 A 2 2 2
3 B 1 1 1
4 C 1 1 1
5 A 1 1 1
6 B 1 3 2
7 B 2 1 3
列可以用整数或字符串填充。我尝试将它们分组,但这并不符合我想要的方式。
如果您
paste
将第二列和第三列放在一起,则 group
将是由结果字符串组成的因子变量的数值(如果按第一列分组)
df <- data.frame(first = c("A", "A", "B", "C", "A", "B", "B"),
second = c(1L, 2L, 1L, 1L, 1L, 1L, 2L),
third = c(1L, 2L, 1L, 1L, 1L, 3L, 1L))
library(tidyverse)
df %>%
mutate(group = as.numeric(factor(paste(second, third))), .by = first)
#> first second third group
#> 1 A 1 1 1
#> 2 A 2 2 2
#> 3 B 1 1 1
#> 4 C 1 1 1
#> 5 A 1 1 1
#> 6 B 1 3 2
#> 7 B 2 1 3