【发布时间】:2020-08-06 17:14:37
【问题描述】:
我正在尝试创建一个新列来指示两个现有列之间的差异。 NAs 应被视为值并应标记为“差异”。但是,NAs 正在“通过”!= 比较器。我一直在寻找 case_when 参数来处理 NAs 并寻找替代的不相等比较器无济于事。
下面的reprex显示了当前的输出和期望的输出。
提前感谢您的帮助!
library(dplyr)
library(tidyr)
library(tibble)
df <-
expand_grid(x = c("a", NA), y = c("b", NA)) %>%
add_row(x = "a", y = "a") %>%
add_row(x = "b", y = "b")
df
#> # A tibble: 6 x 2
#> x y
#> <chr> <chr>
#> 1 a b
#> 2 a <NA>
#> 3 <NA> b
#> 4 <NA> <NA>
#> 5 a a
#> 6 b b
# Non-desired output: NA's passed through instead of treated as values
df %>%
mutate(z = case_when(
x == "a" & y == "a" ~ "a",
x == "b" & y == "b" ~ "b",
x != y ~ "difference"
))
#> # A tibble: 6 x 3
#> x y z
#> <chr> <chr> <chr>
#> 1 a b difference
#> 2 a <NA> <NA>
#> 3 <NA> b <NA>
#> 4 <NA> <NA> <NA>
#> 5 a a a
#> 6 b b b
# Desired output
df %>%
add_column(z = c(rep("difference", 3), NA_character_, "a", "b"))
#> # A tibble: 6 x 3
#> x y z
#> <chr> <chr> <chr>
#> 1 a b difference
#> 2 a <NA> difference
#> 3 <NA> b difference
#> 4 <NA> <NA> <NA>
#> 5 a a a
#> 6 b b b
由reprex package (v0.3.0) 于 2020-08-06 创建
【问题讨论】:
-
你可以使用
is.na,因为==在有NA时返回NA