不要选择NA值

时间:2016-04-21 14:08:32

标签: r select boolean conditional

这是R中的一个小麻烦,我正在寻找是否可能有一些默认情况。

我创建了以下向量:

x <- c(1, 2, 1, NA)

我现在想从x中选择,只有等于1的值。我这样做:

x2 <- x[x == 1]

现在,当你看到x2中的内容时,它有值:

> x2
[1]  1  1 NA

无论条件如何,R默认包含NA值。我希望它默认R从条件中排除NA值(因为NA不满足条件x == 1)。

我知道complete.cases函数,原样使用:

x2 <- x[complete.cases(x == 1)]

所需的输出将是complete.cases方法的结果:

[删除原因我对此进行了解答]

这解决了我的问题,但我很想知道options中是否有设置或类似的设置,我可以默认R在布尔条件中不包含NA。

我想知道是否有设置方法,以便x2 <- x[x == 1]x2 <- x[complete.cases(x == 1)]相同。目前不同的是,非完整的。(正常)方法允许NAs通过,我希望不是这样。

嘿,对不起,我意识到我和complete.cases混淆了我的输出,因为很多人说过,我基本上想看看能不能做到这一点:

> x <- c(1, 2, 1, NA)
> x2 <- x[x == 1 & !is.na(x)]
> x2
[1] 1 1

使用这个:x2 <- x[x == 1]。我可以这样做,以便R 自动忽略NA。我可以创建一个函数来执行此操作,但是想要查看R中是否存在忽略NA的单个条件。

2 个答案:

答案 0 :(得分:6)

你需要哪个?

> x <- c(1, 2, 1, NA)
> x[which(x==1)]
[1] 1 1

要解释一下,which(x==1)会为您提供与测试x匹配的向量x==1中的位置。您将此结果用于子集x,并提供输出。

> which(x==1)
[1] 1 3

答案 1 :(得分:0)

我没有看到返回包含等于1的元素的向量的功能值,因为所有这些元素都是1.相反,在生产中你很可能会返回一个布尔向量,其中{{1} }表示值匹配,TRUE表示值不匹配。

如果您希望FALSE值显示为NA不匹配,则可以进行比较,只需将这些FALSE值替换为false:

NA