使用另一个数据表来调节主数据表r中的列

wol*_*oor 5 r matrix logical-operators data.table

假设我有两个数据表,并且我想使用第二个数据表,其中包含一些具有一些列值的行,以调整第一个数据表.

具体来说,我想使用d2来选择其变量小于或等于值的行.

 d1 = data.table('d'=1,'v1'=1:10, 'v2'=1:10)
 d2 = data.table('v1'=5, 'v2'=5)
Run Code Online (Sandbox Code Playgroud)

所以我想要输出

   d v1 v2
1: 1  1  1
2: 1  2  2
3: 1  3  3
4: 1  4  4
5: 1  5  5
Run Code Online (Sandbox Code Playgroud)

但是我想这样做而不引用特定的名称,除非它是以非常一般的方式,例如names(d2).

the*_*ail 6

您可以通过一些文本操作和连接来完成:

d2[d1, on=sprintf("%1$s>=%1$s", names(d2)), nomatch=0]

#   v1 v2 d
#1:  1  1 1
#2:  2  2 1
#3:  3  3 1
#4:  4  4 1
#5:  5  5 1
Run Code Online (Sandbox Code Playgroud)

它的工作原理是因为sprintf扩展到:

sprintf("%1$s>=%1$s", names(d2))
#[1] "v1>=v1" "v2>=v2"
Run Code Online (Sandbox Code Playgroud)