【问题标题】:R dplyr filter string condition on multiple columnsR dplyr 在多列上过滤字符串条件
【发布时间】:2020-08-29 03:14:09
【问题描述】:

我有一个df,例如

df <-read.table(text="
v1 v2 v3 v4 v5
1  A  B  X  C
2  A  B  C  X
3  A  C  C  C
4  B  D  V  A
5  B  Z  Z  D", header=T)

如果变量 v2 到 v5 有“X”,我如何过滤它们。我已经看到了一些使用过滤器的示例,但这些示例似乎仅适用于数字条件。

filter_at(vars(contains("prefix")), all_vars(.>5))

将 >5 替换为 "X" 不起作用

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    使用dplyr 1.0.4,我们可以使用if_any

    library(dplyr)
    df %>%
        filter(if_any(v2:v5, ~ . == 'X'))
    #   v1 v2 v3 v4 v5
    #1  1  A  B  X  C
    #2  2  A  B  C  X
    

    【讨论】:

      【解决方案2】:

      您可以使用filter_at 和any_vars 来选择至少有一个值为"X" 的行。

      library(dplyr)
      df %>% filter_at(vars(v2:v5), any_vars(. == 'X'))
      
      #  v1 v2 v3 v4 v5
      #1  1  A  B  X  C
      #2  2  A  B  C  X
      

      但是,filter_at 已被取代,因此要将其转换为 across,您可以这样做:

      df %>% filter(Reduce(`|`, across(v2:v5, ~. == 'X')))
      

      在基础 R 中也更容易:

      df[rowSums(df[-1] == 'X') > 0, ]
      

      【讨论】:

        猜你喜欢
        • 2014-10-28
        • 2018-01-25
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 2020-06-19
        • 2018-07-10
        • 2021-01-27
        • 1970-01-01
        相关资源
        最近更新 更多