在 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
我想在群组中创建一个旗帜。分组在 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 进行绘图,因此希望避免该步骤。我尝试使用提到的
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