我有两个数据表.最初的版本如下所示:

library(data.table)
DT <- data.table(
  x = rep(c("b", "a", "c"), each = 3),
  v = rep(c("d", "e", "f"), times = 3),
  foo = 10:18
)

DT
#>    x v foo
#> 1: b d  10
#> 2: b e  11
#> 3: b f  12
#> 4: a d  13
#> 5: a e  14
#> 6: a f  15
#> 7: c d  16
#> 8: c e  17
#> 9: c f  18

第二个看起来像这样:

X <- data.table(x = c("c", "b"), v = c("d", "f"))

X
#>    x v
#> 1: c d
#> 2: b f

我想要将DT中值在X列值中的行设置为子集.

这就是我想要做的:

DT[x %chin% X$x & v %chin% X$v]
#>    x v foo
#> 1: b d  10
#> 2: b f  12
#> 3: c d  16
#> 4: c f  18

但我有50个这样的专栏.

有没有一种简洁的data.table种方法来实现这一点?

我try 使用on参数,但没有返回所需的输出:

DT[X, on = colnames(X)]
#>    x v foo
#> 1: c d  16
#> 2: b f  12

推荐答案

您可以将条件生成为表达式:

cols <- colnames(X)
condition = parse(text=paste0(cols,' %chin% X$', cols, collapse = ' & ')) 

condition
#> expression(x %chin% X$x & v %chin% X$v)

DT[eval(condition)]
#>         x      v   foo
#>    <char> <char> <int>
#> 1:      b      d    10
#> 2:      b      f    12
#> 3:      c      d    16
#> 4:      c      f    18

R相关问答推荐

使用对管道内单元格的引用生成新变量

如何使用按钮切换轨迹?

然后根据不同的列值有条件地执行函数

如何使用列表中多个列表中的第一条记录创建数据框

计算两列中满足特定条件连续行之间的平均值

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

`-`是否也用于数据帧,有时使用引用调用?

多元正态分布的计算

如何预测原始数据集并将值添加到原始数据集中

如何显示准确的p值而不是<;0.001*?

数据集上的R循环和存储模型系数

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

GOGPLATE geom_boxploy色彩疯狂

隐藏基于 case 总数的值

R没有按顺序显示我的有序系数?

使用dqur在不同变量上创建具有多个条件的变量

通过比较来自多个数据框的值和R中的条件来添加新列

R dplyr::带有名称注入(LHS of:=)的函数,稍后在:=的RHS上引用

As.Date()不适用于5月或10月日期

R直方图存储计算的bin值