如何解决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"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。