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 |
我们可以使用 select
和 any
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))
我正在使用 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 |
我们可以使用 select
和 any
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))