过滤R中多列的某个阈值以上的数字

  • 本文关键字:阈值 数字 过滤 r dplyr filter
  • 更新时间 :
  • 英文 :


我有一个包含600多个变量的数据集,我只想保留多列中的值高于特定阈值的行,在我的情况下>=5000000.

对于一列,我会这样过滤:

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((组合来实现这一点,但我只能找到这些函数用于过滤字符列和数字列的示例。类似于这里的例子,我尝试过:

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))

最新更新