dplyr 按管道中的位置过滤向量 %>%

dplyr filter vector by position in pipe %>%

从这个优秀的 中,可以使用下面的 magrittr 包在管道中过滤带有 dplyr 的向量,如下所示:

library(dplyr)
c("D", "B", "C", "A", NA) %>% 
  .[matches("[^AB]", vars=.)]
#[1] "D" "C"

c("D", "B", "C", "A", NA) %>% 
  .[.!="A"]
# [1] "D" "B" "C" NA 

但我想按矢量位置过滤,所以如果我想要前两个位置,我会得到:

#[1] "D" "B"    #want to filter position <= 2

如果我想要第 1 和第 4 个位置,我会得到:

#[1] "D" "A"    #want to filter position by c(1, 4)

等....

实现此目标的最佳方法是什么?

我认为使用 row_number 可能有用,但后来想起这行不通,因为顺序不正确:

row_number(c("D", "B", "C", "A", NA))
# [1]  4  2  3  1 NA

我最好使用 seq_along:

seq_along(c("D", "B", "C", "A", NA))
# [1] 1 2 3 4 5

但我不确定如何将其合并到管道中。

有什么想法吗?

谢谢

术语“过滤”通常不用于描述矢量运算。 Base R 有一个很好的矢量工具 indexing/extracting:[

在这里涉及 magrittr 管道的理由为零。 dplyrfilter() 这样的动词在现实世界中没有用于向量运算的实用程序,它们专门用于操纵 tbl 对象。

在您的示例中,您使用了 tidyselect 助手,但这对于进行基本的位置匹配来说太疯狂了。


> my_vector <- c("D", "B", "C", "A", NA)

> my_vector[c(1,2)]
[1] "D" "B"

> my_vector[c(1,4)]
[1] "D" "A"