2013-07-09 2 views
0

Я переписываю две двоичные переменные в новую переменную, так что любые 1s в первой переменной принимают 0 в новой, а все цифры во второй переменной сохраняются. В приведенном ниже коде представлена ​​логика, которую я хотел бы создать. Однако, когда я запускаю этот код, перекодировка с использованием ifelse() просто воссоздает x2 без включения первой строки ifelse(), которая использует x1 1s как 0. Мысли?перекодировать переменные с NA с ifelse() в R

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, поэтому ifelse(x2 == 0, yes, no) возвращает NA (вместо no), если x2 == NA.

Лучше попробовать

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) 
Смежные вопросы