如何在 dplyr 中使用 recode_factor 重新编码多个因子值?

Vic*_*ica 1 r dplyr recode tidyverse

     countrycode event
1713         ESP 110mh
1009         NED    HJ
536          BLR    LJ
2882         FRA 1500m
509          EST    LJ
2449         BEL    PV
1022         EST    HJ
2530         USA    JT
2714         CUB    JT
1236         HUN  400m
238          BLR  100m
2518         USA    JT
1575         FRA 110mh
615          JPN    LJ
1144         GER    HJ
596          CAN    LJ
2477         HUN    JT
1046         GER    HJ
2501         FIN    DT
2176         KAZ    PV
Run Code Online (Sandbox Code Playgroud)

我想在我的数据框中创建一个新的因子向量eventtype,其中:

具有行100m400m110mh1500mevent可变成为分组为Runs; DT, SP,JT被分组为Throws; 和LJ, HJ,PV被分组为Jumps

我可以单独创建一个新的向量值,例如df$eventtype <- recode_factor(df$event, `100m`="Running")适用于一个事件,但我查看了文档,没有一种简单的方法可以在一个函数调用中转换多个值。

编辑:当然,如果有另一个功能可以更好地满足我的目的,我会使用它。

CJ *_*man 6

函数的...参数recode_factor可以接受任意数量的参数...

library(dplyr)

df <- read.table(header = T, text = "
number countrycode event
1713         ESP 110mh
1009         NED    HJ
536          BLR    LJ
2882         FRA 1500m
509          EST    LJ
2449         BEL    PV
1022         EST    HJ
2530         USA    JT
2714         CUB    JT
1236         HUN  400m
238          BLR  100m
2518         USA    JT
1575         FRA 110mh
615          JPN    LJ
1144         GER    HJ
596          CAN    LJ
2477         HUN    JT
1046         GER    HJ
2501         FIN    DT
2176         KAZ    PV
")

df$eventtype <- recode_factor(df$event, `100m` = "Runs", `400m` = "Runs", 
                              `110mh` = "Runs", `1500m` = "Runs", 
                              DT = "Throws", SP = "Throws", JT = "Throws",
                              LJ = "Jumps", HJ = "Jumps", PV = "Jumps")

# or inside a mutate command
df %>% 
  mutate(eventtype = recode_factor(event, `100m` = "Runs", `400m` = "Runs", 
                                   `110mh` = "Runs", `1500m` = "Runs", 
                                   DT = "Throws", SP = "Throws", JT = "Throws",
                                   LJ = "Jumps", HJ = "Jumps", PV = "Jumps"))
Run Code Online (Sandbox Code Playgroud)