我对基于列中的值以编程方式从data.table
中选择行的方式有疑问。
假设我在Data.table下面
library(data.table)
DT <- data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
现在我要选择y = 3 and v = 2
通常我可以使用以下代码
> DT[y==3& v==2]
x y v
1: a 3 2
但是在我的情况下,这样的选择标准本身就是一个变量,并放入不同的DF
> DF = data.frame('1' = c('y', 'v'), '2' = c(3,2)); DF
X1 X2
1 y 3
2 v 2
在这种情况下,上面的X2
的值将改变,即使行数也是可变的(即,假设我有一个更大的DT
,列数更多,{{1}中有一些额外的行) }可能基于DF
)的生成标准
是否有任何方法可以使用DF
以编程方式选择DF
中的行?
答案 0 :(得分:3)
另一个使用join
的选项:
DT[structure(as.list(DF$X2), names=DF$X1), on=as.character(DF$X1)]
答案 1 :(得分:0)
一种选择是通过eval
{DF}的列来创建表达式
paste
或者我们可以将DT[eval(parse(text= paste(DF$X1, DF$X2, sep="==", collapse=" & ")))]
# x y v
#1: a 3 2
指定为'X1'列,然后将.SDcols
与'X2'进行比较,然后将.SD
与带有{{ 1}},将行子集
Reduce