陷入逻辑索引和R中的“哪个”

时间:2011-06-14 00:35:58

标签: r indexing

在R中是否存在使用“哪个”索引不能与R中的逻辑索引混合的情况?我似乎记得几个月前碰到了这两个问题 - R的味道保留了一些行号的内部概念,这与我在其他地方使用逻辑索引后使用“which”的效果不佳删掉一些行。

这是一个众所周知的现象,还是我梦想了整个事情?

2 个答案:

答案 0 :(得分:10)

请注意NA和其他此类条目可能会混淆情况。关注@ mdsumner的例子:

> x <- c(1:10,NA,NaN,Inf)
> x > 5
 [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE    NA    NA
[13]  TRUE
> x[x > 5]
[1]   6   7   8   9  10  NA  NA Inf
> x[which(x > 5)]
[1]   6   7   8   9  10 Inf

答案 1 :(得分:6)

which返回索引号以从一个向量中选择元素或从矩阵/数组或data.frame中选择切片,这些元素不能与逻辑向量“混合”

考虑所有数字的逻辑向量&gt; 5在这个向量中:

x <- 1:10
x > 5
[1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

这是一个10元素的逻辑向量,但which()等价的长度为5:

其中(x> 5)    [1] 6 7 8 9 10

没有什么可以混合这些东西,他们只是不一起去。第一个隐含地丢弃前五个元素,并通过数据和逻辑向量之间的位置匹配保留最后五个元素

x[x > 5]

,第二个明确只选择最后五个元素

x[which(x > 5)]

结果相同,但“[”运算符的参数在每种情况下都是完全不同的。无论所选元素是向量中的单个值还是data.frame中的行,这都适用。