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