R data.table子集表多个条件

R data.table子集表多个条件,r,data.table,R,Data.table,我正在处理包数据表,我想知道我下面使用的向量扫描的替代方案是什么 x<-data.table(v1=1:30, v2=sample(c("a", "b"), 30, replace=TRUE), v3=sample(1:30, 30, replace=TRUE)) x[(x$v2=="a" & x$v3>10) | (x$v2=="b" & x$v3<20),] x10)|(x$v2==“b”&x$v3我想知道这是否会更快。可能需要一个更大的测试用例来正

我正在处理包数据表,我想知道我下面使用的向量扫描的替代方案是什么

x<-data.table(v1=1:30, v2=sample(c("a", "b"), 30, replace=TRUE),
  v3=sample(1:30, 30, replace=TRUE))

x[(x$v2=="a" & x$v3>10) | (x$v2=="b" & x$v3<20),]

x10)|(x$v2==“b”&x$v3我想知道这是否会更快。可能需要一个更大的测试用例来正确测试,但既然你在问,也许你有一个:

 setkey(x, "v2")
 rbind( x[v2=="a"&v3>10], x[v2=="b"&v3<20] )
setkey(x,“v2”)

rbind(x[v2==“a”&v3>10],x[v2==“b”&v3
数据。据我所知,table
不支持索引条件扫描。在设置键后,您不需要
x$
“sperhaps”将其替换为:
x[J(c('a','b')][(v2 a'&v3>10)|(v2='b'&v3<20)]
-对于
v2
中的大量元素,这应该会产生很大的不同(假设每个键执行多次,或者
setkey
是出于不同的原因执行的)。
 setkey(x, "v2")
 rbind( x[v2=="a"&v3>10], x[v2=="b"&v3<20] )