【问题标题】:dplyr filter vector by position in pipe %>%dplyr 按管道中的位置过滤向量 %>%
【发布时间】:2021-01-23 14:10:58
【问题描述】:

从这个出色的answer 中,可以使用下面的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] "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

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

有什么想法吗?

谢谢

【问题讨论】:

    标签: r vector dplyr magrittr


    【解决方案1】:

    术语“过滤”通常不用于描述向量操作。 Base R 有一个很棒的矢量索引/提取工具:[

    在这里涉及 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"
    
    

    【讨论】:

      猜你喜欢
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多