2013-07-09 77 views
0

我將兩個二進制變量重新編碼爲新變量,使得第一個變量中的任何1都在新的變量中取0,並保留第二個變量中的所有數字。下面的代碼顯示了我想要製作的邏輯。但是,當我運行這段代碼時,使用ifelse()的重新編碼只是重新創建了x2,而沒有合併使用x1的1作爲0的第一個ifelse()行。使用NAs重新編碼變量,並在R中使用ifelse()

set.seed(123) 
x1 <- sample(c(0,1,NA), 20, replace = TRUE) 
x2 <- sample(c(0,1,NA), 20, replace = TRUE) 

recode <- ifelse(x1 == 1, 0, NA) 
recode <- ifelse(x2 == 1, 1, recode) 
recode <- ifelse(x2 == 0, 0, recode) 

table(recode); table(x2) 

感謝

回答

3

也許你想嗎?

ifelse(is.na(x2), ifelse(x1 == 1, 0, NA), x2) 
4

很抱歉,但它確實你想要做什麼。您可能已經忘記的問題是,NA與任何事物的比較結果也是NA,所以如果x2 == NAifelse(x2 == 0, yes, no)則返回NA(而不是no)。

更好

嘗試

recode <- rep(NA, length(x1)) 
recode[ x1 == 1 ] <- 0 
recode[ ! is.na(x2) ] <- x2[ ! is.na(x2) ] 
2

您覆蓋了這些結果。從幫助(「ifelse」)頁的詳細信息部分中的相關行是:

Missing values in test give missing values in the result. 

recode <- ifelse(x1 == 1, 0, NA) 
recode[ !is.na(x2)] <- x2[!is.na(x2)] 
0

我張貼這只是弄清楚是否有某種原因,這一個襯墊不建議:

recode <- ifelse(x1 %in% 1 & is.na(x2), 0, x2)