从矢量R grep NAs

时间:2011-10-17 16:14:25

标签: r

如何使用grep()从矢量中获取NA?

即:当我尝试grep(NA, c(1,NA))

我得到[1] NA NA

4 个答案:

答案 0 :(得分:11)

您想要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 :(得分:2)

grep在这里是错误的选择。请改用内置函数is.na

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

编辑:如果你想要整数索引而不是真/假(更像是grep返回的那些),请使用which(is.na())

答案 2 :(得分:2)

别;请改用whichis.na

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

答案 3 :(得分:0)

使用is.na(c(1, NA))