dplyr过滤第一列

时间:2017-09-25 03:22:30

标签: r filter dplyr

是否可以filter dplyr列的位置?

我知道在没有dplyr

的情况下如何做到这一点

iris[iris[,1]>6,]

但我怎么能在dplyr中做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:7)

除了@thelatemail的建议外,您还可以使用filter_at并将列号传递给vars参数:

iris %>% filter_at(1, all_vars(. > 6))
all(iris %>% filter_at(1, all_vars(. > 6)) == iris[iris[,1] > 6, ])
# [1] TRUE

答案 1 :(得分:3)

没有魔力,只需使用上面的项目列号,而不是变量(列)名称:

library("magrittr")
library("dplyr")

iris %>%
  filter(iris[,1] > 6)

其中@ eipi10评论为

更好
iris %>%
  filter(.[[1]] > 6)

答案 2 :(得分:2)

dply >= 1.0.0

作用域动词(_if_at_all)以及扩展名all_vars()any_vars()已被across()取代。在 filter 的情况下,已创建函数 if_any and if_all 以组合跨多个列的逻辑以帮助进行子集化:

<块引用>

if_any() 和 if_all() 用于将相同的谓词函数应用于选定的列,并将结果组合成单个逻辑向量。

acrossif_anyif_any 的第一个参数仍然是列选择的 tidy-select 语法,包括按列位置选择。

单列

在您的单列情况下,您可以使用相同的结果执行任何操作:

iris %>% 
  filter(across(1, ~ . > 6))

iris %>% 
  filter(if_any(1, ~ . > 6))

iris %>% 
  filter(if_all(1, ~ . > 6))

多列

如果您在多个列中应用谓词函数或公式,那么 across 可能会产生意外结果,在这种情况下,您应该使用 if_anyif_all

iris %>% 
  filter(if_all(c(2, 4), ~ . > 2.3)) # by column position

  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          6.3         3.3          6.0         2.5 virginica
2          7.2         3.6          6.1         2.5 virginica
3          5.8         2.8          5.1         2.4 virginica
4          6.3         3.4          5.6         2.4 virginica
5          6.7         3.1          5.6         2.4 virginica
6          6.7         3.3          5.7         2.5 virginica

注意这会返回所有选定列的值大于 2.3 的行,这是任何选定列满足逻辑的行的子集: >

iris %>% 
  filter(if_any(ends_with("Width"), ~ . > 2.3)) # same columns selection as above

Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1           5.1         3.5          1.4         0.2    setosa
2           4.9         3.0          1.4         0.2    setosa
3           4.7         3.2          1.3         0.2    setosa
4           4.6         3.1          1.5         0.2    setosa
5           5.0         3.6          1.4         0.2    setosa
6           6.7         3.3          5.7         2.5 virginica
7           6.7         3.0          5.2         2.3 virginica
8           6.3         2.5          5.0         1.9 virginica
9           6.5         3.0          5.2         2.0 virginica
10          6.2         3.4          5.4         2.3 virginica
11          5.9         3.0          5.1         1.8 virginica

为了让这个例子更紧凑,上面的输出被缩短了。