2015-11-04 3 views
2

Вот проблема, с которой я столкнулся при использовании функции ifelse в присутствии NA.R Инструкция Ifelse, не работающая из-за NA

данных:

x=data.frame(rbind(c(1,1,0),c(0,NA,1))) 
colnames(x)=c("a","b","c") 

цель: создать столбец "тест", который изменяет значение 0, если а или б равен 1. Если ни или б равен 1, тест = с

проблема: при Ь = НС, которое не равно 1, тест = NA, #when она должна быть 1.

работает правильно для строки 1, но не для строки 2.

x=mutate(x, 
     test=ifelse((a==1|b==1),0,c)) 

> x 
    a b c test 
1 1 1 0 0 
2 0 NA 1 NA 

Любые предложения о том, как их исправить?

+0

'NA' является отсутствием значения. Таким образом, вы можете обновить свои условия, сказав, что произойдет, если a или b является NA или создать процесс, который заменяет NA с фиксированным значением, прежде чем вы выполните 'ifelse'. – AntoniosK

ответ

2

Поскольку условия заботятся только о наличии 1 в a и b, я предложил бы создать процесс, который заменяет NA с, а значение, которое не 1.

Что-то вроде

library(plyr) 

x=data.frame(rbind(c(1,1,0),c(0,NA,1))) 
colnames(x)=c("a","b","c") 

# create an updated version of x where NAs are replaced with 0s 
x2 = sapply(x, function(i){ifelse(is.na(i),0,i)}) 

x2 = data.frame(x2) 

x2 = mutate(x2, test=ifelse((a==1|b==1),0,c)) 

# update initial dataset 
x$test = x2$test 

x 

# a b c test 
# 1 1 1 0 0 
# 2 0 NA 1 1 

Если вы хотите создать ifelse условия попробовать это

mutate(x, test = ifelse((a!=1 | is.na(a)) & (b!=1 | is.na(b)), c, 0)) 
+1

Спасибо за обнаружение ошибки, последнее исправление исправлено! – christoph

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