在R中是否存在使用“哪个”索引不能与R中的逻辑索引混合的情况?我似乎记得几个月前碰到了这两个问题 - R的味道保留了一些行号的内部概念,这与我在其他地方使用逻辑索引后使用“which”的效果不佳删掉一些行。
这是一个众所周知的现象,还是我梦想了整个事情?
答案 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
中的行,这都适用。