Select 我在 data.table 中从哪一列收到结果 join - R
Select which column I receive the results from in data.table join - R
我想 select 我想通过在连接中传递它来接收结果的列。
我的数据采用以下格式:
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
和 return 来自 x
或 y
列的结果,具体取决于从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 式”答案,需要将 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
我想 select 我想通过在连接中传递它来接收结果的列。
我的数据采用以下格式:
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
和 return 来自 x
或 y
列的结果,具体取决于从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 式”答案,需要将 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