2015-09-14 3 views
0

Я делаю некоторый анализ, и всякий раз, когда найдено NA, мой цикл останавливается, который берет один за другим. Поэтому я хочу сказать, если моя ценность не NA идти вперед и далее в цикле. если это NA, просто проигнорируйте его и перейдите к следующему. или даже вернуть NA. Я попытался это:Как игнорировать NA в R?

x=c(5,4,6,4,2,1,5,NA) 
    if (x != NA){ 
    y=x+2} 


Error in if (x != NA) { : missing value where TRUE/FALSE needed 
+4

Будьте осторожны с использованием векторов в 'if()' statement. В вашем случае 'x' является вектором, и если вы просто используете его внутри' if() ', будет использоваться только первый элемент' x'. Если вы хотите проверить каждый элемент 'x' за NA, попробуйте что-то вроде этого:' y = ifelse (! Is.na (x), x + 2, NA) ' –

+1

' y <- as.vector (na .omit (x)) + 2' (если вы не против того, чтобы в большинстве случаев безвредные атрибуты висели вокруг, вы можете опустить 'as.vector()'. – hrbrmstr

+1

@scoa, который не будет работать для примера ternor. – hrbrmstr

ответ

5

x!=NA не является ни истинным, ни ложным, но NA. Вы можете использовать функцию is.na, чтобы проверить, нет ли что-либо NA или нет:

> x=c(5,4,6,4,2,1,5,NA) 
> x!=NA 
[1] NA NA NA NA NA NA NA NA 
> x==NA 
[1] NA NA NA NA NA NA NA NA 
> is.na(x) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE 
> y <- x[which(!is.na(x))]+2 
> y 
[1] 7 6 8 6 4 3 7 
> 
Смежные вопросы