dplyr过滤器矢量在管道%>%

问题描述

通过出色的answer,可以使用下面的dplyr包在管道中使用magrittr过滤向量,如下所示:

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

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

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

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

如果我想要第一和第四的位置,我会得到:

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

等...

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

我认为使用row_number可能有用,但是后来记住这是行不通的,因为顺序不正确:

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

使用seq_along会更好:

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

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

有什么想法吗?

谢谢

解决方法

术语“过滤”通常不用于描述向量运算。 Base R具有用于向量索引/提取的出色工具:[

在这里包含magrittr管道的理由为零。 dplyr之类的filter()动词没有用于矢量操作的实际工具,它们专门用于操纵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"