R - 在 ifelse 语句中处理 NA
R - handling NA in ifelse statements
此问题与 this question 略有相似,但更具理论性。
给定以下 df:
varA <- c(1,0,0,NA,NA)
varB <- c(NA,NA,NA,1,0)
df <- data.frame(varA, varB)
varA varB
1 NA
0 NA
0 NA
NA 1
NA 0
生成 var
的最优雅方法是什么(考虑到 NA),它结合了 varA
和 varB
的信息?
varA varB var
1 NA 1
0 NA 0
0 NA 0
NA 1 1
NA 0 0
我现在的做法如下:
df$var[df$varA == 1 | df$varB == 1] <- 1
df$var[df$varA == 0 | df$varB == 0] <- 0
作为附带问题,R 如何处理 ifelse
语句中的 NA?例如,如果我编写以下代码,它不会产生我想要的输出。
df$var <- ifelse(df$varA == 1 | df$varB == 1, 1,
ifelse(df$varA == 0 | df$varB == 0, 0, NA)
出于您的目的,NA 等同于 0,那么为什么不将它们转换为 0?
df[is.na(df)] <- 0
df$var <- with(df, as.integer(varA | varB))
> df
varA varB var
1 1 0 1
2 0 0 0
3 0 0 0
4 0 1 1
5 0 0 0
combines the information from varA and varB
您似乎在寻找 coalesce
:
library(dplyr)
df %>% mutate(var = coalesce(varA, varB))
# varA varB var
#1 1 NA 1
#2 0 NA 0
#3 0 NA 0
#4 NA 1 1
#5 NA 0 0
我们可以使用pmax
df$var <- do.call(pmax, c(df, na.rm = TRUE))
df$var
#[1] 1 0 0 1 0
此问题与 this question 略有相似,但更具理论性。
给定以下 df:
varA <- c(1,0,0,NA,NA)
varB <- c(NA,NA,NA,1,0)
df <- data.frame(varA, varB)
varA varB
1 NA
0 NA
0 NA
NA 1
NA 0
生成 var
的最优雅方法是什么(考虑到 NA),它结合了 varA
和 varB
的信息?
varA varB var
1 NA 1
0 NA 0
0 NA 0
NA 1 1
NA 0 0
我现在的做法如下:
df$var[df$varA == 1 | df$varB == 1] <- 1
df$var[df$varA == 0 | df$varB == 0] <- 0
作为附带问题,R 如何处理 ifelse
语句中的 NA?例如,如果我编写以下代码,它不会产生我想要的输出。
df$var <- ifelse(df$varA == 1 | df$varB == 1, 1,
ifelse(df$varA == 0 | df$varB == 0, 0, NA)
出于您的目的,NA 等同于 0,那么为什么不将它们转换为 0?
df[is.na(df)] <- 0
df$var <- with(df, as.integer(varA | varB))
> df
varA varB var
1 1 0 1
2 0 0 0
3 0 0 0
4 0 1 1
5 0 0 0
combines the information from varA and varB
您似乎在寻找 coalesce
:
library(dplyr)
df %>% mutate(var = coalesce(varA, varB))
# varA varB var
#1 1 NA 1
#2 0 NA 0
#3 0 NA 0
#4 NA 1 1
#5 NA 0 0
我们可以使用pmax
df$var <- do.call(pmax, c(df, na.rm = TRUE))
df$var
#[1] 1 0 0 1 0