Select 列基于列中的值

Select Columns based on Values in Column

我正在使用 tidyverse 并且我知道 filter 方法允许过滤具有匹配特定条件的值的所有行,如下所示。它过滤至少在列中值介于 0 和 3 之间的所有行。

filter_all(any_vars(. > 0 & .<3)) 

我怎样才能在列的基础上做同样的事情?如果我的 tibble 看起来像下面这样,我想写一个 select,其中 returns 所有列至少有一行的值大于 4(应该 return 列B,C)

    | A | B | C |
    -------------
    | 1 | 1 | 2 |
    | 2 | 5 | 1 |
    | 3 | 6 | 9 |

我们可以使用 selectany

library(dplyr)
df1 %>%
      select_if(~ any(. > 4))

-输出

#  B C
#1 1 2
#2 5 1
#3 6 9

或者像新版本一样使用where

df1 %>%
    select(where(~ any(. > 4)))
#  B C
#1 1 2
#2 5 1
#3 6 9

base R中,这可以用Filter

来完成
Filter(function(x) any(x > 4), df1)

sapply

df1[sapply(df1, function(x) any(x > 4))]

colSums

df1[colSums(df1 >4) > 0]     

数据

df1 <- data.frame(A = 1:3, B = c(1, 5, 6), C = c(2, 1, 9))