R grep NA от вектора - PullRequest
       5

R grep NA от вектора

3 голосов
/ 17 октября 2011

Как мне использовать grep(), чтобы получить NA от вектора?

, то есть: когда я пытаюсь grep(NA, c(1,NA))

, я получаю [1] NA NA

Ответы [ 4 ]

11 голосов
/ 17 октября 2011

Вы хотите is.na():

> vec <- c(1,NA)
> is.na(vec)
[1] FALSE  TRUE

Если вы хотите NA, попробуйте

> which(is.na(vec))
[1] 2
> vec[which(is.na(vec))]
[1] NA
> vec[is.na(vec)] # simpler, logical subscripting
[1] NA

Если вы этого не сделаете, отрицайте вывод от is.na():

> !is.na(vec)
[1]  TRUE FALSE
> which(!is.na(vec))
[1] 1
> vec[which(!is.na(vec))]
[1] 1
> vec[!is.na(vec)] ## simpler, logical subscripting
[1] 1

Одна из причин, по которой ваш код не работает, это то, что вы дали NA в качестве шаблона. Для R это означает, что шаблон не определен, поэтому совпадение любого из элементов вектора с этим шаблоном также не определено - следовательно, оба являются NA в выходных данных.

2 голосов
/ 17 октября 2011

Не;используйте which и is.na вместо:

> which(is.na(c(1,NA)))
[1] 2
> which(is.na(c(NA,1,NA)))
[1] 1 3
2 голосов
/ 17 октября 2011

grep неправильный вариант здесь.Вместо этого используйте встроенную функцию is.na.

> is.na(c(1,NA))
[1] FALSE  TRUE

РЕДАКТИРОВАТЬ: если вам нужны целочисленные индексы, а не истина / ложь (что больше похоже на то, что возвращает grep), используйте which(is.na()).

0 голосов
/ 17 октября 2011

Использование is.na(c(1, NA)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...