我有一个包含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))