2016-12-02 130 views
-1

这个问题与this question有些类似,有更多的理论成分。R - 处理NA中的ifelse语句

下面

由于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考虑),它结合了varAvarB信息的最优雅的方法是什么?

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 NA在ifelse报表?例如,如果我编写下面的代码,它不会生成我想要的输出。

df$var <- ifelse(df$varA == 1 | df$varB == 1, 1, 
      ifelse(df$varA == 0 | df$varB == 0, 0, NA) 
+2

尝试'rowSum s .. –

+0

你是什么意思的“结合”?和? –

回答

2

结合了内翻varB信息

好像你正在寻找​​3210:

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 
+0

正是我在找的!谢谢! – kquach

1

为了您的目的,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 
+0

缺失可能是重要的信息来源。感谢您的解决方案! – kquach

1

我们可以使用pmax

df$var <- do.call(pmax, c(df, na.rm = TRUE)) 
df$var 
#[1] 1 0 0 1 0