首页 > 解决方案 > 我什么时候应该使用“which”进行子集化?

问题描述

这是一个玩具示例。

 iris %>% 
  group_by(Species) %>% 
  summarise(max = Sepal.Width[Sepal.Length == max(Sepal.Length)])

 # A tibble: 3 x 2
  Species      max
  <fct>      <dbl>
1 setosa       4  
2 versicolor   3.2
3 virginica    3.8

它在使用时提供相同的输出which()

iris %>% 
  group_by(Species) %>% 
  summarise(max = Sepal.Width[which(Sepal.Length == max(Sepal.Length))])
# summarise(max = Sepal.Width[which.max(Sepal.Length)])

# A tibble: 3 x 2
  Species      max
  <fct>      <dbl>
1 setosa       4  
2 versicolor   3.2
3 virginica    3.8

help(which)说:

给出逻辑对象的 TRUE 索引,允许数组索引。

==做同样的事情:显示 TRUE & FALSE

那么什么时候which()对子集有用呢?

标签: r

解决方案


什么时候"=="结束NA。尝试(1:2)[which(c(TRUE, NA))](1:2)[c(TRUE, NA)].

如果NA未删除,则按NA给出的索引NA(请参阅 参考资料?Extract)。但是,此删除不能由 完成na.omit,否则您可能会得到TRUE可能错误的位置。一个安全的方法是替换NA然后FALSE做索引。但是为什么不直接使用which呢?


推荐阅读