在 R 中创建一列以比较组内的值并标记为大于 (1)、小于 (0) 或等于 (2)

Create a column in R to compare values within a group and flag as greater than (1), less than (0) or equal (2)

我想在群组中创建一个旗帜。分组在 Round 上,然后在 Team 上,如下所示。 Flag 应为每轮得分最低的球队为 0,得分最高为 1,如果每轮得分相同则为 2。 “标志”列的预期输出和以下示例数据:

Round Team Score Flag
1 Team1 4 0
1 Team2 8 1
2 Team1 9 1
2 Team2 2 0
3 Team1 6 2
3 Team2 6 2
4 Team1 14 1
4 Team2 9 0

曾考虑使用 pivot_wider 并获得结果,但稍后需要再次 pivot_longer 进行绘图,因此希望避免该步骤。我尝试使用提到的 and 解决方案,它们相似但无法破解。有人可以帮忙吗? TIA

df %>%
  group_by(Round) %>%
  # mutate(Flag = case_when(Score == max(Score) & Score == min(Score) ~ 2, # equivalent
  mutate(Flag = case_when(diff(range(Score)) == 0 ~ 2, 
                          Score == max(Score)     ~ 1,
                          TRUE                    ~ 0))
df %>%
  group_by(Round) %>%
  mutate( Flag1 = replace(rank(Score) - 1, length(unique(Score)) == 1, 2))

  Round Team  Score  Flag Flag1
  <int> <chr> <int> <int> <dbl>
1     1 Team1     4     0     0
2     1 Team2     8     1     1
3     2 Team1     9     1     1
4     2 Team2     2     0     0
5     3 Team1     6     2     2
6     3 Team2     6     2     2
7     4 Team1    14     1     1
8     4 Team2     9     0     0