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)