私は2つの大きなデータセットd1
とd2
を持っています。これは、一意の変数idA
とのマッチに基づいてマージしたいと思います。1つの変数に一致する2つのデータセットを効率的にマージするOR
両方とも両方のデータセットに存在しますが、どちらもエラーと欠損値(NAs)を含む場合があり、idA
とidB
が別のデータセットの異なる観測点を指しています。例は以下の通りです。
希望する結果は以下のとおりです。基本的に、一致はidAまたはidBのいずれかにあります。重複した一致の場合は、idA
の一致がidB
と一致するように設定する必要があります。
実際のデータセットはかなり大きく(10億円)です。
Rでこれを実装する方法はありますか?
また、このようなSQLの結合の技術用語はありますか?
library(tidyverse)
library(data.table)
d1 <- read.table(text=
"idA idB value1
A 10 500
B 1 111
C 4 234
D NA 400
E 7 500
NA 3 700
Z 5 543
Q 9 567
U 23 723
",
header=T) %>% data.table
d2 <- read.table(text=
"idA idB value2
A 10 11
B 1 12
L 21 15
D 15 12
E 8 17
M 3 18
N 5 13
Z 25 17
Q 23 12
",
header=T) %>% data.table
所望の結果である:
Out <- read.table(text=
"d1.idA d2.idA d1.idB d2.idB d1.v1 d2.v2
A A 10 10 500 11 # matched on idA and idB
B B 1 1 111 12 # matched on idA and idB
D D NA 15 400 12 # matched on idA. d2.idB had NAs
E E 7 8 500 17 # matched on idA. idB had divergent values
NA M 3 3 700 18 # matched on idB. d1.idA had NAs
Z Z 5 25 543 13 # d1[7,] matched to d2[8,] on idA and d2[9,] on idB. Priority given to idA match.
Q Q 9 23 657 17 # d2[9,] matched to d1[8,] on idA and d1[9,] on idB. Priority given to idA match.
",
header=T) %>% data.table
#Non matched rows
# d1[3,]
# d2[3,]
EDIT1:
- は、所望の結果
- を加えは、読者による 解析の容易さ(read.tableを)data.table維持実際のデータはfread(ファイル)からのものです。
EDIT2:希望の結果から一致しない行を削除します。
@akrun、私はこれがどのように重複しているのか分かりません。私はどのように2つのid変数で結合するかについて尋ねています。 (疑問は、同じ変数の内、左、剛性の結合を指します) – LucasMation
ロビー活動を再開する前に、希望する結果をあなたの例に記入してください。 "idB以上のidA一致に優先する必要があります"ということは、それ自身ではっきりしていません。また、fyiの場合、データセットが大きい場合は、data.table(read.table(。))の代わりに 'fread'を使用することをお勧めします。これは、読み込みが遅くなり、読み込みが遅くなり、 DTに変換します。 – Frank
は要求された機能を追加しました。それでも元の質問は、重複して表示された質問に完全に無関係です – LucasMation