wolfsatthedoor
wolfsatthedoor

Reputation: 7313

Using another data table to condition on columns in a primary data table r

Suppose I have two data tables, and I want to use the second one, which contains a row with some column values, to condition the first one.

Specifically, I want to use d2 to select rows where its variables are less than or equal to the values.

 d1 = data.table('d'=1,'v1'=1:10, 'v2'=1:10)
 d2 = data.table('v1'=5, 'v2'=5)

So I would want the output to be

   d v1 v2
1: 1  1  1
2: 1  2  2
3: 1  3  3
4: 1  4  4
5: 1  5  5

But I want to do this without referencing specific names unless it's in a very general way, e.g. names(d2).

Upvotes: 5

Views: 113

Answers (1)

thelatemail
thelatemail

Reputation: 93938

You could do it with a bit of text manipulation and a join:

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

It works because the sprintf expands to:

sprintf("%1$s>=%1$s", names(d2))
#[1] "v1>=v1" "v2>=v2"

Upvotes: 6

Related Questions