R grep NAs из vector

#r

#r

Вопрос:

Как я могу использовать grep() для получения NAs из vector?

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

Я получаю [1] NA NA

Ответ №1:

Вы хотите 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 в выходных данных.

Комментарии:

1. vec[which(!is.na(vec))] слишком сложно, его достаточно использовать vec[!is.na(vec)] .

Ответ №2:

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

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

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

Ответ №3:

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

 > which(is.na(c(1,NA)))
[1] 2
> which(is.na(c(NA,1,NA)))
[1] 1 3
  

Ответ №4:

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