web-dev-qa-db-ja.com

merge()関数を使用してRの選択された列のみを左結合します

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      
49
Samer Nachabé

これを行うには、マージに渡すデータをサブセット化します。

merge(x = DF1, y = DF2[ , c("Client", "LO")], by = "Client", all.x=TRUE)

または、現在のマージ後に列を削除するだけです:)

84
stanekam

エレガントなものはありませんが、これは別の満足のいく答えかもしれません。

merge(x = DF1, y = DF2, by = "Client", all.x=TRUE)[,c("Client","LO","CON")]

これは、結果でテーブルを結合するために使用されたキーが不要な場合に特に役立ちます。

2
Akshay Kadidal

dplyr関数selectおよびleft_joinを使用する方が少し簡単だと思います。少なくとも私にとっては理解しやすいです。 dplyrの結合関数は、SQL引数を模倣するために作成されます。

 library(tidyverse)

 DF2 <- DF2 %<%
   select(client, LO)

 joined_data <- left_join(DF1, DF2, by = "Client")

この場合、列の名前が同じであるため、実際には「by」引数を使用する必要はありません。

2
Ben G