use*_*222 2 r tidyverse tibble
我正在使用tidyverse并且我知道该filter方法允许过滤具有与特定条件匹配的值的所有行,如下所示。它会筛选至少在某一列中值介于 0 到 3 之间的所有行。
filter_all(any_vars(. > 0 & .<3))
Run Code Online (Sandbox Code Playgroud)
我怎样才能在列的基础上做同样的事情?如果我的tibble看起来像下面这样,我想编写select一个返回至少一行中值大于 4 的所有列(应返回 B、C 列)
| A | B | C |
-------------
| 1 | 1 | 2 |
| 2 | 5 | 1 |
| 3 | 6 | 9 |
Run Code Online (Sandbox Code Playgroud)
akr*_*run 11
我们可以select使用any
library(dplyr)
df1 %>%
select_if(~ any(. > 4))
Run Code Online (Sandbox Code Playgroud)
-输出
# B C
#1 1 2
#2 5 1
#3 6 9
Run Code Online (Sandbox Code Playgroud)
where或者像新版本一样使用
df1 %>%
select(where(~ any(. > 4)))
# B C
#1 1 2
#2 5 1
#3 6 9
Run Code Online (Sandbox Code Playgroud)
在 中base R,这可以通过以下方式完成Filter
Filter(function(x) any(x > 4), df1)
Run Code Online (Sandbox Code Playgroud)
或者与sapply
df1[sapply(df1, function(x) any(x > 4))]
Run Code Online (Sandbox Code Playgroud)
或与colSums
df1[colSums(df1 >4) > 0]
Run Code Online (Sandbox Code Playgroud)
df1 <- data.frame(A = 1:3, B = c(1, 5, 6), C = c(2, 1, 9))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2785 次 |
| 最近记录: |