Rのmerge、dplyr、またはdata.tableを使用してRのデータをマージする方法

Rには、共通の列でデータフレームを結合するためのすばやくエレガントな方法がいくつかあります。そのうちの3つをお見せしたいと思います。

  • ベースRのmerge()関数、
  • dplyrの関数ファミリーに参加し、
  • data.tableの角かっこ構文。

データを取得してインポートする

この例では、お気に入りのデモデータセットの1つである米国運輸統計局のフライト遅延時間を使用します。フォローする場合は、// bit.ly/USFlightDelaysにアクセスし、Flight DateReporting_AirlineOriginDestinationDepartureDelayMinutesの各列を使用して選択した時間枠のデータをダウンロードします。また、Reporting_Airlineのルックアップテーブルを取得します。

または、これら2つのデータセットに加えて、1つのファイルにある私のRコードと、さまざまなタイプのデータマージを説明するPowerPointをここからダウンロードします。

Rでデータをマージする方法については、コード、データ、およびPowerPointをダウンロードしてください。記事に付随するいくつかのデータファイル、PowerPoint、およびRスクリプトが含まれています。シャロン・マクリス

ベースRのファイルを読み込むには、最初にフライト遅延ファイルを解凍してから、フライト遅延データとコードルックアップファイルの両方をread.csv()。でインポートします。コードを実行している場合、ダウンロードした遅延ファイルの名前は、以下のコードとは異なる可能性があります。また、ルックアップファイルの異常な.csv_拡張子に注意してください。

unzip( "673598238_T_ONTIME_REPORTING.zip")

mydf <-read.csv( "673598238_T_ONTIME_REPORTING.csv"、

sep = "、"、quote = "\" ")

mylookup <-read.csv( "L_UNIQUE_CARRIERS.csv_"、

quote = "\" "、sep ="、 ")

次に、両方のファイルを次のように確認しますhead()

head(mydf)FL_DATE OP_UNIQUE_CARRIER ORIGIN DEST DEP_DELAY_NEW X 1 2019-08-01 DL ATL DFW 31 NA 2 2019-08-01 DL DFW ATL 0 NA 3 2019-08-01 DL IAH ATL 40 NA 4 2019-08-01 DL PDX SLC 0 NA 5 2019-08-01 DL SLC PDX 0 NA 6 2019-08-01 DL DTW ATL 10 NA

head(mylookup)コード説明1 02Q Titan Airways 2 04Q Tradewind Aviation 3 05Q Comlux Aviation、AG 4 06Q Master Top Linhas Aereas Ltd. 5 07Q Flair Airlines Ltd. 6 09Q Swift Air、LLC d / b / a Eastern Air Lines d / b / aイースタン

ベースRとマージします

mydf遅延データフレームには、コードによる航空会社情報のみが含まれます。からの航空会社名の列を追加したいと思いmylookupます。これを行うmerge()ための基本的なRの方法の1つは、基本的な構文を使用する関数を使用することmerge(df1, df2)です。データフレーム1とデータフレーム2の順序は関係ありませんが、どちらか最初の方がxと見なされ、2番目の方がyと見なされます。 

結合する列の名前が同じでない場合は、結合する列をマージに指示する必要がありますby.x。xデータフレームの列名とby.y、yなどのy列merge(df1, df2, by.x = "df1ColName", by.y = "df2ColName")です。

引数all.xall.y。を使用して、一致しない行を含むすべての行が必要か、一致する行のみが必要かをマージに指示することもできます。この場合、遅延データのすべての行が必要です。ルックアップテーブルに航空会社コードがない場合でも、情報が必要です。ただし、遅延データに含まれていないルックアップテーブルの行は必要ありません(古い航空会社のコードがいくつかあり、そこにはもう飛んでいません)。したがって、all.x等しいTRUEall.y等しいFALSE。完全なコード:

join_df <-merge(mydf、mylookup、by.x = "OP_UNIQUE_CARRIER"、

by.y = "Code"、all.x = TRUE、all.y = FALSE)

新しく結合されたデータフレームには、キャリアコードに基づいた航空会社の名前が記載されたDescriptionという列が含まれています。

head(joined_df)OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEWX説明19E 2019-08-12 JFK SYR 0 NA Endeavour Air Inc. 2 9E 2019-08-12 TYS DTW 0 NA Endeavour Air Inc. 3 9E 2019-08-12 ORF LGA 0 NA Endeavour Air Inc. 4 9E 2019-08-13 IAH MSP 6 NA Endeavour Air Inc. 5 9E 2019-08-12 DTW JFK 58 NA Endeavour Air Inc. 6 9E 2019-08-12 SYR JFK 0 NA Endeavour Air Inc. 。

dplyrと結合します

dplyrは、結合関数にSQLデータベース構文を使用します。左が参加 手段:(のxデータフレームだったものを左にすべて含めるmerge())と、すべての行をその右(y)のデータフレームからの一致。結合列の名前が同じ場合、必要なのはleft_join(x, y)。だけです。それらが同じ名前を持っていない場合はby、などの引数が必要left_join(x, y, by = c("df1ColName" = "df2ColName"))です。

次の構文に注意してくださいby。これは名前付きベクトルであり、左右両方の列名が引用符で囲まれています。

を使用して両方のデータセットをインポートおよびマージするコードleft_join()は次のとおりです。dplyrパッケージとreadrパッケージをロードすることから始め、次に2つのファイルをread_csv()。で読み込みます。を使用する場合read_csv()、最初にファイルを解凍する必要はありません。

ライブラリ(dplyr)

ライブラリ(リーダー)

mytibble <-read_csv( "673598238_T_ONTIME_REPORTING.zip")

mylookup_tibble <-read_csv( "L_UNIQUE_CARRIERS.csv_")

join_tibble <-left_join(mytibble、mylookup_tibble、

by = c( "OP_UNIQUE_CARRIER" = "Code"))

read_csv()いくつかの追加機能を備えたデータフレームの一種であるtibblesを作成します。left_join()2つをマージします。構文を見てください。この場合、順序が重要です。left_join()つまり、左側または最初のデータセットのすべての行が含まれますが、2番目のデータセットから一致する行のみが含まれます。また、2つの異なる名前の列で結合する必要があるため、by引数を含めました。

dplyrの glimpse()関数を使用して結果の構造を確認できます。これは、データフレームの上位数項目を確認するもう1つの方法です。

glimpse(joined_tibble)観測値:658,461変数:7 $ FL_DATE 2019-08-01、2019-08-01、2019-08-01、2019-08-01、2019-08-01…$ OP_UNIQUE_CARRIER "DL"、 "DL "、" DL "、" DL "、" DL "、" DL "、" DL "、" DL "、" DL "、" DL "、…$ ORIGIN" ATL "、" DFW "、" IAH "、" PDX "、" SLC "、" DTW "、" ATL "、" MSP "、" JF…$ DEST "DFW"、 "ATL"、 "ATL"、 "SLC"、 "PDX"、 "ATL"、 "DTW "、" JFK "、" MS…$ DEP_DELAY_NEW 31、0、40、0、0、10、0、22、0、0、0、17、5、2、0、0、8、0、…$ X6 NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、NA、…$説明「DeltaAir Lines Inc。」、「Delta Air LinesInc。」、「デルタ航空…

この結合されたデータセットには、航空会社の名前の新しい列があります。このコードのバージョンを自分で実行すると、dplyrがベースRよりもはるかに高速であることに気付くでしょう。

次に、結合を行うための超高速の方法を見てみましょう。