我正在將列添加到內部連接并且不理解結果。
考慮表 A,B:
A <- data.table(id=c(1,2,3), x_val = c("x1", "x2", "x3"))
id x_val
# 1: 1 x1
# 2: 2 x2
# 3: 3 x3
B <- data.table(id=c(1,2,4), y_val = c("y1", "y2", "y3"))
# id y_val
# 1: 1 y1
# 2: 2 y2
# 3: 4 y3
現在考慮這些連接,前兩個完全有意義。
A[B, on=.(id)]
# rows=3 This join is what I expect. The last row of B is included, but col A no has match.
# id x_val y_val
# <num> <char> <char>
# 1: 1 x1 y1
# 2: 2 x2 y2
# 3: 4 <NA> y3
#
A[B, on=.(id), nomatch=NULL]
# rows=2 To remove the unmatching row use nomatch=NULL (ie inner join)
# id x_val y_val
# <num> <char> <char>
# 1: 1 x1 y1
# 2: 2 x2 y2
現在的驚喜。
完成了行,現在關注columns:
在下面的情況下,每個columns和 標簽都是預期的,但行數不是。我希望每種情況下都有 2 行。
我錯過了什么?
A[B, .(A.id = A$id), on=.(id), nomatch=NULL]
# A.id
# <num>
# 1: 1
# 2: 2
# 3: 3
A[B, .(B$id), on=.(id), nomatch=NULL]#
# V1
# <num>
# 1: 1
# 2: 2
# 3: 4
A[B, .(A.id = A$id, B.id= B$id, A.x_val = A$x_val, B$y_val), on=.(id), nomatch=NULL]
# A.id B.id A.x_val V4
# <num> <num> <char> <char>
# 1: 1 1 x1 y1
# 2: 2 2 x2 y2
# 3: 3 4 x3 y3
uj5u.com熱心網友回復:
要在合并兩個data.tables 時選擇列(就像您正在做的那樣),您不應該使用美元符號。您可以分別在 A 和 B 中的列名稱(在 的合并中A[B])加上x.和i.(見下文)。
您缺少的是,在您的示例中,您選擇的是原始資料集(有 3 行)中的列,而不是選擇有 2 行的(內部)連接資料集中的列。
A[B, .(A.id = x.id), on=.(id), nomatch=NULL] # prefixing id with x. select id from A
# A.id
# 1: 1
# 2: 2
A[B, .(i.id), on=.(id), nomatch=NULL] # prefixing id with i. select id from B
# i.id
# 1: 1
# 2: 2
A[B, .(A.id = x.id, B.id= i.id, A.x_val = x.x_val, i.y_val), on=.(id), nomatch=NULL]
# A.id B.id A.x_val i.y_val
# 1: 1 1 x1 y1
# 2: 2 2 x2 y2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460009.html
下一篇:制作一個包含所有可能組合的表格
