2つのデータフレームを左に結合しようとしていますが、2番目のデータセットのすべての変数を結合したくありません。
例として、データセット1(DF1)があります。
Cl Q Sales Date
A 2 30 01/01/2014
A 3 24 02/01/2014
A 1 10 03/01/2014
B 4 10 01/01/2014
B 1 20 02/01/2014
B 3 30 03/01/2014
そして、結合データセット2(DF2)を残したいと思います。
Client LO CON
A 12 CA
B 11 US
C 12 UK
D 10 CA
E 15 AUS
F 91 DD
私は次のコードで参加を脱退することができます:
merge(x = DF1、y = DF2、by = "Client"、all.x = TRUE):
Client Q Sales Date LO CON
A 2 30 01/01/2014 12 CA
A 3 24 02/01/2014 12 CA
A 1 10 03/01/2014 12 CA
B 4 10 01/01/2014 11 US
B 1 20 02/01/2014 11 US
B 3 30 03/01/2014 11 US
ただし、列LOとCONの両方をマージします。列LOをマージしたいだけです。
Client Q Sales Date LO
A 2 30 01/01/2014 12
A 3 24 02/01/2014 12
A 1 10 03/01/2014 12
B 4 10 01/01/2014 11
B 1 20 02/01/2014 11
B 3 30 03/01/2014 11
これを行うには、マージに渡すデータをサブセット化します。
merge(x = DF1, y = DF2[ , c("Client", "LO")], by = "Client", all.x=TRUE)
または、現在のマージ後に列を削除するだけです:)
エレガントなものはありませんが、これは別の満足のいく答えかもしれません。
merge(x = DF1, y = DF2, by = "Client", all.x=TRUE)[,c("Client","LO","CON")]
これは、結果でテーブルを結合するために使用されたキーが不要な場合に特に役立ちます。
dplyr
関数select
およびleft_join
を使用する方が少し簡単だと思います。少なくとも私にとっては理解しやすいです。 dplyr
の結合関数は、SQL引数を模倣するために作成されます。
library(tidyverse)
DF2 <- DF2 %<%
select(client, LO)
joined_data <- left_join(DF1, DF2, by = "Client")
この場合、列の名前が同じであるため、実際には「by」引数を使用する必要はありません。