gpt4 book ai didi

r - 如果不在 case_when 语句中,则保留值

转载 作者:行者123 更新时间:2023-12-03 21:16:44 26 4
gpt4 key购买 nike

我的数据如下所示:

df <- expand.grid(grade = c("A", 1, "B", 2, 3, "C"), value = c(0, 1))

当我尝试更换 A 时, B , 和 C s 在 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 s,包括最终的全面测试和更换。

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
创建于 2021-02-19 由 reprex package (v1.0.0)

关于r - 如果不在 case_when 语句中,则保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com