根据列条件以编程方式从Data.table中选择行

时间:2019-07-01 09:38:40

标签: r data.table

我对基于列中的值以编程方式从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中的行?

2 个答案:

答案 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