R 对每个列使用不同条件筛选所有

R 对每个列使用不同条件筛选所有,r,filter,dplyr,R,Filter,Dplyr,我有下面的向量 vec1 = c(0.001, 0.05, 0.003, 0.1) 和一个数据帧 df = data_frame( x = seq(0.001, 0.1, length.out = 10), y = seq(0.03, 0.07, length.out = 10), z = seq(0, 0.005, length.out = 10), w = seq(0.05, 0.25, length.out = 10)) 我想过滤df,这样输出将包含df的行,在每列中,最小值将是相应的

我有下面的向量

vec1 = c(0.001, 0.05, 0.003, 0.1)
和一个数据帧

df = data_frame( x = seq(0.001, 0.1, length.out = 10), y = seq(0.03, 0.07, length.out = 10), z = seq(0, 0.005, length.out = 10), w = seq(0.05, 0.25, length.out = 10))
我想过滤
df
,这样输出将包含
df
的行,在每列中,最小值将是相应的
vec1-0.05
,最大值将是
vec1+0.05

因此,在此示例中,只有前4行满足此条件(在
x
中,我允许基于
vec1
的第一个条目
-0.049到0.501
,在
y
中,我允许基于第二个条目
0
0.1
,依此类推)

我相信这可以通过
filter\u all
(.)
来实现,这是一种类似于

filter_all(df, all_vars(. >= (vec1(.) - 0.05) &  . <= (vec1(.) + 0.05))))

filter\u all(df,all_vars(.>=(vec1()-0.05)&.我们可以在数据帧上使用
mapply
,并将其与
vec1
一起传递,检查哪些值满足条件,并仅选择所有列中都有
TRUE
值的行

df[rowSums(mapply(function(x, y) x > (y-0.05) & x < (y+0.05),
                                           df, vec1))  == ncol(df), ]

#      x      y        z      w
#   <dbl>  <dbl>    <dbl>  <dbl>
#1 0.0120 0.0344 0.000556 0.0722
#2 0.0230 0.0389 0.00111  0.0944
#3 0.0340 0.0433 0.00167  0.117 
#4 0.0450 0.0478 0.00222  0.139 
df[行和(mapply(函数(x,y)x>(y-0.05)和x<(y+0.05),
df,vec1))==ncol(df),]
#x y z w
#           
#1 0.0120 0.0344 0.000556 0.0722
#2 0.0230 0.0389 0.00111  0.0944
#3 0.0340 0.0433 0.00167  0.117 
#4 0.0450 0.0478 0.00222  0.139 
行和(df>(vec1[col(df)]-0.05)和df<(vec1[col(df)]+0.05))==ncol(df)