如何使用grep()
从矢量中获取NA?
即:当我尝试grep(NA, c(1,NA))
我得到[1] NA NA
答案 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)
别;请改用which
和is.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))
。