我想case_when在内部使用mutate_at,如下例所示:
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(case_when(
. %in% c(1,0,9) ~ TRUE
. %in% c(2,20,200) ~ FALSE
TRUE ~ as.character(.)
)))
Run Code Online (Sandbox Code Playgroud)
. =在funs()通话中使用的替代版本也不起作用.
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ TRUE
. %in% c(2, 20, 200) ~ FALSE
TRUE ~ as.character(.)
)))
Run Code Online (Sandbox Code Playgroud)
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(ifelse(. %in% c(1, 0, 9), TRUE, FALSE)))
Run Code Online (Sandbox Code Playgroud)
FALSE可以用第二次ifelse()调用替换,我为了简洁而没有包括.
我们需要,将每个案例分开.另外,如果我们保留最后一个选项character,那么它也TRUE/FALSE应该是字符.没有混合的类型
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ TRUE,
. %in% c(2, 20, 200) ~ FALSE,
TRUE ~ TRUE
)))
Run Code Online (Sandbox Code Playgroud)
如果我们需要创建character类,并且如果两种情况中的任何一种不正确,也可以将列作为字符返回
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ "Yes",
. %in% c(2, 20, 200) ~ "No",
TRUE ~ as.character(.)
)))
Run Code Online (Sandbox Code Playgroud)