R Data.table基于大于值的列向量筛选行

R Data.table基于大于值的列向量筛选行,r,data.table,R,Data.table,我在data.table中有一个列名的可变列表,并且希望对所有列名应用相同的筛选器,以将我的表的行子集(即,给出列表中所有列都>=5的行) 如果需要满足所有列的条件,请创建逻辑向量的列表,然后将其减少为单个逻辑向量 DT[DT[, Reduce(`&`, lapply(.SD, `>=`, 5)), .SDcols = cols]] # ID a b c #1: a 5 11 17 #2: c 6 12 18 或另一个带有行和的选项 DT[ DT[, rowSums

我在data.table中有一个列名的可变列表,并且希望对所有列名应用相同的筛选器,以将我的表的行子集(即,给出列表中所有列都>=5的行)


如果需要满足所有列的条件,请创建逻辑向量的
列表
,然后
将其减少为单个逻辑向量

DT[DT[, Reduce(`&`, lapply(.SD, `>=`, 5)), .SDcols = cols]]
#   ID a  b  c
#1:  a 5 11 17
#2:  c 6 12 18

或另一个带有
行和的选项

DT[ DT[, rowSums(.SD >= 5) == length(cols), .SDcols = cols]]
注意:这两个选项都是矢量化的,都是有效的

基准
DT1=5)=长度(cols),.SDcols=cols]]
#用户系统运行时间
#  0.464   0.127   0.555 
系统时间(DT1[DT1[,Reduce(`&`,lappy(.SD,`>=`,5)),.SDcols=cols]]
#用户系统运行时间
#  0.134   0.022   0.150 
system.time(DT1[DT1[,apply(.SD>=5,1,all),.SDcols=cols],]))
#用户系统运行时间
#  6.636   0.087   6.687 

如果需要满足所有列的条件,请创建逻辑向量的
列表,然后
将其缩减为单个逻辑向量

DT[DT[, Reduce(`&`, lapply(.SD, `>=`, 5)), .SDcols = cols]]
#   ID a  b  c
#1:  a 5 11 17
#2:  c 6 12 18

或另一个带有
行和的选项

DT[ DT[, rowSums(.SD >= 5) == length(cols), .SDcols = cols]]
注意:这两个选项都是矢量化的,都是有效的

基准
DT1=5)=长度(cols),.SDcols=cols]]
#用户系统运行时间
#  0.464   0.127   0.555 
系统时间(DT1[DT1[,Reduce(`&`,lappy(.SD,`>=`,5)),.SDcols=cols]]
#用户系统运行时间
#  0.134   0.022   0.150 
system.time(DT1[DT1[,apply(.SD>=5,1,all),.SDcols=cols],]))
#用户系统运行时间
#  6.636   0.087   6.687 
DT[ DT[, apply(.SD >= 5, 1, all), .SDcols=cols], ]
#    ID a  b  c
# 1:  a 5 11 17
# 2:  c 6 12 18