2014-10-08 2 views
1

Я знаю, что многие вопросы задают около ifelse, но я искал и много пробовал, но не успел, поэтому я размещаю вопрос здесь.заявление ifelse для более чем двух условий

У меня есть кадр данных из 10k участников с 8 переменными, каждая переменная кодируется 0, 1, 9 и NA. Я хотел бы создать одну переменную для суммирования всех 8 переменных.

Условие, которое я хочу создать: если один из 8 переменных имеет значение 1, то новая переменная должна быть 1, если одна имеет 9, а затем возвращает 9, иначе (все в строке являются NA или другими) return 0.

код я создал это, но получить только 1 и NA:

z = with(dt, ifelse(var.1==1|var.2==1|var.3==1|var.4==1| 
var.5==1|var.6==1|var.7==1|var.8==1, 1, ifelse(var.1==9|var.2==9|var.3==9|var.4==9| 
var.5==9|var.6==9|var.7==9|var.8==9, 9, 0))) 

Спасибо.

+0

ваш код кажется хорошо. что это означает: «Созданный мной код - это, но получить только 1 и NA». Не могли бы вы поделиться своим ожидаемым результатом? также, воспроизводимый пример с даже несколькими рядами действительно поможет. – Ujjwal

+0

вывод только 1 и NA, однако, когда я использую только первые 3 или 4 переменные, он отлично работает. – klo

+1

Логическое условие 'x == 1' возвращает' TRUE', если x = 1, 'FALSE', если x! = 1, но' NA', если x = NA. – jlhoward

ответ

2

Тест (непроверенный код в отсутствие данных, например):

ifelse(rowSums(dt[ , c("var.1","var.2", "var.3", "var.4", "var.5", "var.6", "var.7", 
         "var.8")]==1, na.rm=TRUE), 1, 
     ifelse( rowSums(dt[ , c("var.1","var.2", "var.3", "var.4", "var.5", 
           "var.6", "var.7", "var.8")]==9, na.rm=TRUE) , 
       9, 0)) 

Существует неявное приведение значения от 0 до ложной по IfElse звонков и любое значение, отличное от 0 значение TRUE. na.rm=TRUE удерживает суммы от NA. Я полагаю, вы могли бы столкнуться с проблемами, если все значения в строке были равны NA.

+0

Спасибо, этот код работает! Интересно, как вы используете rowSum, но все равно получаете 1 или 9, а не сумму ... надеюсь, что вы поняли, что я имею в виду. – klo

+0

'ifelse' принуждает целые суммы к TRUE или FALSE. –

Смежные вопросы