And*_*a M 2 r conditional-statements recode
当我%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
Run Code Online (Sandbox Code Playgroud)
#> colour is_warm1 is_warm2
#> 1 red TRUE TRUE
#> 2 orange TRUE TRUE
#> 3 blue FALSE FALSE
#> 4 <NA> NA FALSE
Run Code Online (Sandbox Code Playgroud)
这在重新编码分类变量时非常没有帮助,因为它会默默地填充缺失值。为什么会发生这种情况?是否有任何不涉及列出所有==条件的替代方案?(想象一下colour包含三十个可能的级别)。
a %in% b只是简写match(a, b, nomatch = 0) > 0(检查源代码以使%in%自己确信情况确实如此)。
您可以通过删除参数来获得预期的结果nomatch = 0:
match(dt$colour, c("red", "orange")) > 0
#> [1] TRUE TRUE NA NA
Run Code Online (Sandbox Code Playgroud)
这当然不需要ifelse
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |