使用R中的dplyr过滤阈值高于/低于阈值的所有列?

问题描述 投票:0回答:2

我的数据集包含介于-1到1之间的数值。

我想对其进行过滤,以使其仅返回最小值超过-0.3的列。

作为虚拟数据集:

So I'd want to return only columns g1 and g5 as they have at least one value below -0.3 threshold.

所以我只想返回g1和g5列,因为它们至少有一个低于-0.3阈值的值。

实际的数据集比这个大得多,我想知道如何在dplyr中做到这一点。

如果有更好的软件包或工具,请告诉我?

r dplyr
2个回答
1
投票

有多种方法可以执行此操作:

在R中,

使用Filter

Filter(function(x) any(x < -0.3), df)

带有apply

df[apply(df < -0.3, 2, any)]
#Similar with sapply
#df[sapply(df, function(x) any(x < -0.3))]

dplyr中,我们可以使用select_if

library(dplyr)
df %>% select_if(~any(. < -0.3))

#     g1    g5
#1 -0.05  0.90
#2  0.00  0.54
#3  0.10 -0.44
#4  0.00  0.30
#5  0.15  0.07
#6 -0.56  0.06
#7 -0.70  0.22

数据

df <- data.frame(g1 = c(-0.05, 0, 0.1, 0, 0.15, -0.56, -0.7), 
                 g2 = c(0, 0.03, -0.04, 0.015, -0.05, -0.06, -0.08), 
                 g3 = c(0.3, 0.2, 0.12, 0.11, -0.01, -0.02, 0.02), 
                 g4 = c(0.6, 0.37, 0.28, 0.205, 0.03, 0.02, 0.12), 
                 g5 = c(0.9, 0.54, -0.44, 0.3, 0.07, 0.06, 0.22))

0
投票

base R中,我们可以在逻辑矩阵上使用colSums

df[colSums(df <  -0.3) > 0]

或带有sapply

df[sapply(df, function(x) any(x < -0.3))]

数据

df <- data.frame(g1 = c(-0.05, 0, 0.1, 0, 0.15, -0.56, -0.7), 
                 g2 = c(0, 0.03, -0.04, 0.015, -0.05, -0.06, -0.08), 
                 g3 = c(0.3, 0.2, 0.12, 0.11, -0.01, -0.02, 0.02), 
                 g4 = c(0.6, 0.37, 0.28, 0.205, 0.03, 0.02, 0.12), 
                 g5 = c(0.9, 0.54, -0.44, 0.3, 0.07, 0.06, 0.22))
© www.soinside.com 2019 - 2024. All rights reserved.