r语言 - 如何使用dplyr和casewhen,跨组和跨行,有三个结果?



这对我来说似乎是一个简单的问题,但我非常执着!我的数据如下:

Name round  MatchNumber Score
<chr> <int> <int> <dbl>
1 A         1     1    48
2 B         1     1    66
3 C         1     2    74
4 D         1     2    62
5 E         1     3    61
6 F         1     3    63
7 G         1     4    63
8 H         1     4    63
9 E         2     1    51
10 D         2     1    59
11 A         2     2    50
12 H         2     2    78
13 B         2     3    51
14 G         2     3    47
15 C         2     4    72
16 F         2     4    73

我只想从Score创建一个新的列Outcome,以指定每个名称、回合和匹配都有一个输赢或平局。理想情况下,这将通过dplyr完成,也可能通过casewhen完成,但我无法理解按行计算和分组。我尝试过(但被卡住了(以下内容:

MatchOutcome <- ExampleData %>%  
arrange(round, MatchNumber) %>% 
group_by(Name, round, MatchNumber) %>% 
mutate(Outcome = Score)

我理想的输出应该是:

Name round  MatchNumber Score Outcome
<chr>   <int> <int> <dbl> <chr>
1 A         1     1    48    Loss
2 B         1     1    66    Win
3 C         1     2    74    Win
4 D         1     2    62    Loss
5 E         1     3    61    Loss
6 F         1     3    63    Win
7 G         1     4    63    Draw
8 H         1     4    63    Draw
9 E         2     1    51    Loss
10 D         2     1    59    Win
11 A         2     2    50    Loss
12 H         2     2    78    Win
13 B         2     3    51    Win
14 G         2     3    47    Loss
15 C         2     4    72    Loss
16 F         2     4    73    Win

也许是这样的?

ExampleData %>%
group_by(round, MatchNumber) %>%
mutate(Outcome = case_when(Score == mean(Score) ~ "Draw",
Score == max(Score) ~ "Win",
TRUE ~ "Loss")) %>%
ungroup()
# A tibble: 16 x 5
Name  round MatchNumber Score Outcome
<chr> <int>       <int> <int> <chr>  
1 A         1           1    48 Lose   
2 B         1           1    66 Win    
3 C         1           2    74 Win    
4 D         1           2    62 Lose   
5 E         1           3    61 Lose   
6 F         1           3    63 Win    
7 G         1           4    63 Draw   
8 H         1           4    63 Draw   
9 E         2           1    51 Lose   
10 D         2           1    59 Win    
11 A         2           2    50 Lose   
12 H         2           2    78 Win    
13 B         2           3    51 Win    
14 G         2           3    47 Lose   
15 C         2           4    72 Lose   
16 F         2           4    73 Win  

数据:

ExampleData <- read.table(text = "Name round  MatchNumber Score
1 A         1     1    48
2 B         1     1    66
3 C         1     2    74
4 D         1     2    62
5 E         1     3    61
6 F         1     3    63
7 G         1     4    63
8 H         1     4    63
9 E         2     1    51
10 D         2     1    59
11 A         2     2    50
12 H         2     2    78
13 B         2     3    51
14 G         2     3    47
15 C         2     4    72
16 F         2     4    73")

最新更新