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).
您可以通过一些文本操作和连接来完成:
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)