首页 > 解决方案 > 使用负 str_detect 过滤多列上的行时,any_vars 和 all_vars 谓词的用法不明确

问题描述

我正在建立一个网络:

from <- c("America, port unspecified", "Boston", "Chicago", "America, port unspecified")
to <-  c("Europe, port unspecified", "Nantes", "Le Havre", "Lisbonn")

dataset <- data.frame(from, to)

library(dplyr)

我想用不包含未指定端口的行子集我的数据集:

     from       to
     Boston     Nantes
     Chicago    Le Havre

我试过这个:在下面的代码中,我在所有列中搜索字符串“未指定端口”。我想保留字符串“未指定端口”不存在于任何变量中的行。

dataset2 <- dataset %>%
              filter_all(any_vars(!str_detect(., "port unspecified")))

结果 :

 from   to
Boston  Nantes
Chicago Le Havre
America, port unspecified   Lisbonn

我成功地尝试了下面的代码:

dataset3 <- dataset %>%
    filter_all(all_vars(!str_detect(., "port unspecified")))

结果 :

from  to
Boston  Nantes
Chicago Le Havre

为什么 all_vars 给了我预期的结果而不是 any_vars ?

标签: rdplyr

解决方案


library(dplyr)
dataset %>% filter_all(any_vars(!str_detect(., "port unspecified")))

这读作第 2、3、4 行的列 中"port unspecified"不存在的选择行。any

而这

dataset %>% filter_all(all_vars(!str_detect(., "port unspecified")))

表示选择第 2 行和第 3行中"port unspecified" 不存在的行。all

希望这足够清楚,可以理解。


推荐阅读