R dplyr 根据多个选定列的条件过滤行

标签 r filter dplyr

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

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

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 可以吗?谢谢。

最佳答案

我们可以使用 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_atany_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)

关于R dplyr 根据多个选定列的条件过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67038464/

相关文章:

r - 检测字符串中的重复项

r - 具有不同大小矩形和颜色的热图

python - 使用 python 和 R 最小化 docker 镜像

r - 如何将 vline 添加到 facet_grid 中的所有图形?

r - 在 dplyr 链中添加边距行总计

r - 如何在 tibbles 上取消对 which.min 的破坏

curl - 如何通过curl查询Logstash并仅返回特定字段

c# - Rails ActionController 类中的 around_filter 等价于 C# 的东西是什么?

javascript - 使用字符串键映射嵌套 JavaScript 对象,然后过滤列表

r - 过滤所有列中包含特定字符串的行(使用 dplyr)