过滤R中多列超过特定阈值的数字

Filtering numbers above a certain threshold for multiple columns in R

我有一个包含 600 多个变量的数据集,我只想保留多列中的值高于某个阈值的行,在我的例子中 >= 5,000,000。

对于单个列,我会像这样过滤:

df <- df %>%
  filter(variable.2019.03 >= 5000000)

我可以像这样对多个列执行此操作:

df <- df %>%
  filter(variable.2019.03 >= 5000000 & variable.2019.04 >= 5000000 &
         variable.2019.05 >= 5000000)

但是,我想对 30 多个列执行此操作,所以我希望有更优雅的方法。我的理解是,我应该能够结合使用 filter() 函数和 if_all() 来执行此操作,但我只能找到这些函数用于过滤字符列或数字列的示例。类似例子here,我试过:

  filter(if_all(>= 5000000), variable.2019.03:variable.2022.03)

仅产生此错误消息:

Error: unexpected '>=' in:
"df <- df %>%
  filter(if_all(>="

对实现预期结果有什么建议吗?

我们需要在 if_all 中指定列 (.cols)。默认情况下它是 everything(),因此我们更改为仅匹配以 (^) 'variable' 后跟一个点 (.)、四位数字 (\d{4})...,在 matches 中(使用正则表达式匹配列名)

library(dplyr)
df %>%
   filter(if_all(matches('^variable\.\d{4}\.d{2}$'), ~ .x >= 5000000))

如果列相邻,我们可以使用:

df %>%
    filter(if_all(variable.2019.03:variable.2022.03, ~ .x >= 5000000))