Christian Borck
Christian Borck

Reputation: 1862

join two data tables based on column conditions

I was wondering how joining of two data.tables based on column conditions works! So which column is used, inner or/before outer?

require(data.table)

outer <- data.table(KeyColumn=letters, value_outer=seq_along(letters))
inner  <- data.table(KeyColumn=letters[4:6], value_inner=c(100,101,102))

setkey(outer, KeyColumn)
setkey(inner, KeyColumn)

outer[inner] # works as expected

inner[value_outer<10] # error as expected, because column doesn't exist in inner

outer[inner[value_outer<10], NewColumn := value_inner] # why does this work?

If the conditional column is present (names identical) in both data.tables, but values differ, which column is used, inner or/before outer?

Upvotes: 4

Views: 142

Answers (1)

Christian Borck
Christian Borck

Reputation: 1862

Thanks to @eddi who answered in a comment:

inner looks at its columns, doesn't find value_outer, so looks at its parent environment, which is outer, thus that value_outer is same as outer$value_outer

Upvotes: 1

Related Questions