2016-12-02 123 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