目标:评估两个单独的列(下面的 var1 和 var2),并使用 ifelse 语句创建第三个复合列(下面的 var3)。例如,我想检查每一列,如果它们都包含 NA,我需要在第三列 var3 中包含 NA。如果 var1 或 var2 包含 -1、0 或 1,我希望它位于 var3 中
问题:显示所有 NA。我知道评估 NA 时存在一些愚蠢的问题,但我错过了它。
期望的输出:
var1 var2 var3
1 NA 1
NA 1 1
NA NA NA
NA -1 -1
0 NA 0
Run Code Online (Sandbox Code Playgroud)
可重现的例子:
library(tidyverse)
df <- data.frame(var1 = c(1, 1, NA, NA, 0),
var2 = c(NA, 1, NA, -1, NA))
df_addvar3 <- df %>%
mutate(var3 = ifelse(var1 == NA | var2 == NA, NA,
ifelse(var1 == -1 | var2 == -1, -1,
ifelse(var1 == 0 | var2 == 0, 0,
ifelse(var1 == 1 | var2 == 1, 1, NA)))))
df_addvar3
Run Code Online (Sandbox Code Playgroud)
只是为了解释为什么你的版本不起作用:NA == NA不是TRUE,它是NA- 从概念上讲这是有道理的,通常我们想知道两个值是否相同,如果我们不知道其中一个或两个值,我们就不知道它们是否相同。要测试某个值是否为NA您需要使用该函数is.NA()。这是一个简单的版本:
df_addvar3 <- df %>%
mutate(var3 = ifelse(is.na(var1), var2, var1))
Run Code Online (Sandbox Code Playgroud)
您的问题不太清楚如果值不同于 -1:1,或者 var1 和 var2 都不是 NA,但彼此不同,您想要发生什么。如果需要的话,所有这些都应该相对简单地添加。