我的数据集包含介于-1到1之间的数值。
我想对其进行过滤,以使其仅返回最小值超过-0.3的列。
作为虚拟数据集:
所以我只想返回g1和g5列,因为它们至少有一个低于-0.3阈值的值。
实际的数据集比这个大得多,我想知道如何在dplyr中做到这一点。
如果有更好的软件包或工具,请告诉我?
有多种方法可以执行此操作:
在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))
在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))