gpt4 book ai didi

r - 为什么带有 %in% 的条件会忽略缺失值?

转载 作者:行者123 更新时间:2023-12-05 08:35:45 24 4
gpt4 key购买 nike

当我在条件中使用 %in% 并重新编码分类变量时,我遇到了意外输出。

当左侧向量的元素为 NA 时,条件评估为 FALSE,而我预计它为 NA

预期的行为是用 | 分隔的两个 == 条件的更冗长的语句

dt <- data.frame(colour = c("red", "orange", "blue", NA))

# Expected
dt$is_warm1 <- ifelse(dt$colour == "red" | dt$colour == "orange", TRUE, FALSE)

# Unexpected
dt$is_warm2 <- ifelse(dt$colour %in% c("red", "orange"), TRUE, FALSE)

dt
#>   colour is_warm1 is_warm2
#> 1 red TRUE TRUE
#> 2 orange TRUE TRUE
#> 3 blue FALSE FALSE
#> 4 <NA> NA FALSE

这在重新编码分类变量时非常无用,因为它会默默地填充缺失值。为什么会发生这种情况,是否有任何替代方案不涉及列出所有 == 条件? (假设 color 包含三十个可能的级别)。

最佳答案

a %in% b 只是 match(a, b, nomatch = 0) > 0 的简写(检查 %in% 的源代码 让你自己确信是这样的)。

您可以通过删除 nomatch = 0 参数来获得预期的结果:

match(dt$colour, c("red", "orange")) > 0
#> [1] TRUE TRUE NA NA

这当然不需要 ifelse

关于r - 为什么带有 %in% 的条件会忽略缺失值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72983277/

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