此问题解决如何分配组内行的排名。我想将子组的排名分配给该子组中的一行。我真正想说的是,我需要group_by保证唯一的第二个变量的缩写,这是我能想到的最好的方法。希望下面所需的输出使这一点足够清楚。
输入数据框:
my_df <- tibble(
var1 = c(rep("A", 8), rep("B", 12)),
var2 = c(rep("long_string_x", 4),
rep("long_string_y", 4),
rep("long_string_x", 4),
rep("long_string_y", 4),
rep("long_string_z", 4))
)
Run Code Online (Sandbox Code Playgroud)
期望的输出:
# A tibble: 20 x 3
var1 var2 group_rank
<chr> <chr> <dbl>
1 A long_string_x 1
2 A long_string_x 1
3 A long_string_x 1
4 A long_string_x 1
5 A long_string_y 2
6 A long_string_y 2
7 A long_string_y 2
8 A long_string_y 2
9 B long_string_x 1
10 B long_string_x 1
11 B long_string_x 1
12 B long_string_x 1
13 B long_string_y 2
14 B long_string_y 2
15 B long_string_y 2
16 B long_string_y 2
17 B long_string_z 3
18 B long_string_z 3
19 B long_string_z 3
20 B long_string_z 3
Run Code Online (Sandbox Code Playgroud)
我怎么可以指定group_rank使用tidyverse方法如上,理想的(但不一定是)?
我们可以match在分组后使用
library(dplyr)
my_df %>%
group_by(var1) %>%
mutate(group_rank = match(var2, unique(var2))) %>%
ungroup
Run Code Online (Sandbox Code Playgroud)
-输出
# A tibble: 20 x 3
var1 var2 group_rank
<chr> <chr> <int>
1 A long_string_x 1
2 A long_string_x 1
3 A long_string_x 1
4 A long_string_x 1
5 A long_string_y 2
6 A long_string_y 2
7 A long_string_y 2
8 A long_string_y 2
9 B long_string_x 1
10 B long_string_x 1
11 B long_string_x 1
12 B long_string_x 1
13 B long_string_y 2
14 B long_string_y 2
15 B long_string_y 2
16 B long_string_y 2
17 B long_string_z 3
18 B long_string_z 3
19 B long_string_z 3
20 B long_string_z 3
Run Code Online (Sandbox Code Playgroud)