使用 mutate_all 内的函数根据条件在多列中重新编码变量

Recode variable in multiples columns based on condition using function inside mutate_all

我有这个数据:

    # A tibble: 169 x 5
   `Topical Anesthesist`             `Skin Glue`                   `Sedation Servi~ `Child Life Ther~ Hypnosis     
   <chr>                             <chr>                         <chr>            <chr>             <chr>        
 1 No, because we do not see/treat ~ No, because we do not see/tr~ No               No                No           
 2 No, we do not have one available  Yes                           No               No                No           
 3 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                No           
 4 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                No           
 5 Yes: LET/LAT (lidocaine, epineph~ Yes                           No               No                No           
 6 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                Yes: during ~
 7 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                Yes: during ~
 8 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                Yes: during ~
 9 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                Yes: during ~
10 Yes: LET/LAT (lidocaine, epineph~ Yes                           Yes              No                No   

根据列的不同,我的值带有 "yes",后面跟着各种字符链("yes, all day"、"yes: during the whole day" 等)。我所有的价值观都以是或否开始。 我想将每个以 yes 开头的值替换为单词 "Checked",并将每个以 "No" 开头的值替换为 "Unchecked"("Checked" 和 "Unchecked" 是我的其他值在我的其余数据集中使用,我的代码使用它们)

我试试看:

data %>%
  mutate_all(.funs = fct_recode,
             "Checked" = starts_with("yes"),
             "Unchecked" = starts_with("no"))

我得到这个错误:

starts_with()` must be used within a selecting function.

我不知道如何简单地解决我的问题...

感谢您的帮助!

以下代码采用 starwars 数据集,查找以 "bl" 开头的每个条目并将其替换为 "HA":

library(dplyr)
data(starwars)
func = function(x){
  ifelse(grepl("^bl",x), "HA", x)
}

mutate_all(starwars, func)

按照这种模式,我建议您尝试类似的方法:

func = function(x){
  ifelse(grepl("^Yes",x), "Checked", ifelse(grepl("^No",x), "Unchecked", x))
}
data %>% mutate_all(func)

或者更优雅地使用 case_when:

func = function(x){
  case_when(grepl("^Yes", x) ~"Checked",
            grepl("^No", x) ~"Unchecked",
            TRUE ~as.character(x))
}

data %>% mutate_all(func)