R Data.table基于大于值的列向量筛选行
我在data.table中有一个列名的可变列表,并且希望对所有列名应用相同的筛选器,以将我的表的行子集(即,给出列表中所有列都>=5的行)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
如果需要满足所有列的条件,请创建逻辑向量的
列表
,然后将其减少为单个逻辑向量
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