【问题标题】:R dplyr filter rows based on conditions from several selected columnsR dplyr 根据来自多个选定列的条件过滤行
【发布时间】:2021-07-06 08:36:14
【问题描述】:

我有一个数据框DF,我想根据几个选定列的条件对其进行过滤。

例如,我想过滤 DF 中满足以下条件的行:该行包含列PCS_ABPCS_ADPCS_BD小于 0.03 的任何值。

DF <- cbind.data.frame(A = c(100, 10, 13),
                       B = c(33, 44, 12),
                       D = c(110, 21, 22),
                       PCS_AB = c(0.03, 0.001, 0.3),
                       PCS_AD = c(0.01, 0.2, 0.33),
                       PCS_BD = c(0.99, 1.0, 0.45))

我可以通过以下代码实现:

DF_filter <- DF %>%
  filter(PCS_AB < 0.03 | PCS_AD < 0.03 | PCS_BD < 0.03)

但我想要一些更简单的东西,比如下面的伪代码:

DF2 <- DF %>%
      filter(any(starts_with("PCS")) < 0.03)

dplyr 可以吗?谢谢。

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    我们可以使用dplyr1.0.4版本中的if_any

    library(dplyr)
    DF %>%
       filter(if_any(starts_with("PCS"), ~ . <= 0.03))
    

    -输出

    #   A  B   D PCS_AB PCS_AD PCS_BD
    #1 100 33 110  0.030   0.01   0.99
    #2  10 44  21  0.001   0.20   1.00
    

    filter_at 也可以与any_vars 一起使用(即将被弃用)

    DF %>%
      filter_at(vars(starts_with("PCS")), any_vars(. <= 0.03))
    

    -输出

    #    A  B   D PCS_AB PCS_AD PCS_BD
    #1 100 33 110  0.030   0.01   0.99
    #2  10 44  21  0.001   0.20   1.00
    

    或者使用rowSums创建逻辑向量

    DF %>%
        filter(rowSums(select(., starts_with('PCS')) < 0.03) > 0)
    

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 1970-01-01
      • 2013-09-06
      • 2023-03-13
      • 2017-05-04
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多