选择我从数据中的哪个列接收结果.table join - r



我想通过在连接中传递它来选择我想要接收结果的列。

我的数据采取下列格式:

tab1 = data.table(z = c(1,2,3,4),
x = c("A", "B", "C", "D"),
y = c("E", "F", "G", "H"))
tab2 = data.table(z = c(1,2,3,4),
column = c("x", "x", "y", "y"))

我已经尝试了以下解决方案,但它们不起作用:

# solutions that dont work
tab2[, val := tab1[tab2, on = .(z), get(i.column)]]
tab2[, val := tab1[tab2, on = .(z), column, with=F]]

我试图将tab2加入tab1,并从xy列返回结果,具体取决于从column字段评估。

结果如下:

| z | column | val |
--------------------
| 1 | x      | A   |
| 2 | x      | B   |
| 3 | y      | G   |
| 4 | y      | H   |

多谢

我们需要by参数

tab2[tab1, val := get(column), on = .(z), by = .EACHI]

与产出

> tab2
z column val
1: 1      x   A
2: 2      x   B
3: 3      y   G
4: 4      y   H

这是一个' sql style ';答案,这需要重塑tab2从宽格式到长格式。然后,列名成为数据项。

tab2[, val := melt(tab1, id.var = "z")[tab2, on = .(z, variable = column), value]]
tab2
z column val
1: 1      x   A
2: 2      x   B
3: 3      y   G
4: 4      y   H

最新更新