这是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的单个条件。
答案 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