我的数据如下所示:
df <- expand.grid(grade = c("A", 1, "B", 2, 3, "C"), value = c(0, 1))
当我尝试更换A
,B
以及C
■在一个case_when
声明中,非替换值去NA
......我希望他们留下来!
试图:
library(dplyr)
df_new <- df %>%
mutate(grade = case_when(
.$grade == "A" ~ 1,
.$grade == "B" ~ 2,
.$grade == "C" ~ 3))
所需的输出:
df <- data.frame(grade = c(rep(1, 4), rep(2, 4), rep(3, 4)), value = rep(c(0, 1), 6))
注意**寻找case_when
解决方案,而不是ifelse
解决方案。
case_when
语句是双向公式,其中左侧是逻辑测试,右侧是该测试为时要分配的值TRUE
。
逻辑测试从未匹配的值将获得默认替换值:NA
。为避免这些值变小NA
,请进行最后的全面测试和替换。
library(tidyverse)
df <- expand.grid(grade = c("A", 1, "B", 2, 3, "C"), value = c(0, 1))
df %>%
mutate(old_grade = grade) %>%
select(old_grade, grade, value) %>%
mutate(grade = case_when(
grade == "A" ~ 1,
grade == "B" ~ 2,
grade == "C" ~ 3,
TRUE ~ as.numeric(as.character(grade)))
)
#> Warning: Problem with `mutate()` input `grade`.
#> i NAs introduced by coercion
#> i Input `grade` is `case_when(...)`.
#> old_grade grade value
#> 1 A 1 0
#> 2 1 1 0
#> 3 B 2 0
#> 4 2 2 0
#> 5 3 3 0
#> 6 C 3 0
#> 7 A 1 1
#> 8 1 1 1
#> 9 B 2 1
#> 10 2 2 1
#> 11 3 3 1
#> 12 C 3 1
由reprex软件包(v1.0.0)创建于2021-02-19
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句