使用 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)
我有这个数据:
# 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)