Cara menggabungkan data di R menggunakan R merge, dplyr, atau data.table

R memiliki sejumlah cara cepat dan elegan untuk menggabungkan bingkai data dengan kolom umum. Saya ingin menunjukkan kepada Anda tiga di antaranya:

  • merge()fungsi dasar R ,
  • dplyr's join family of functions, dan
  • sintaks braket data.table.

Dapatkan dan impor data

Untuk contoh ini, saya akan menggunakan salah satu kumpulan data demo favorit saya - waktu tunda penerbangan dari Biro Statistik Transportasi AS. Jika Anda ingin mengikutinya, buka //bit.ly/USFlightDelays dan unduh data untuk jangka waktu pilihan Anda dengan kolom Flight Date , Reporting_Airline , Origin , Destination , dan DepartureDelayMinutes . Dapatkan juga tabel pencarian untuk Reporting_Airline .

Atau, unduh dua kumpulan data ini - ditambah kode R saya dalam satu file dan PowerPoint yang menjelaskan berbagai jenis penggabungan data - di sini:

Download Kode, data, dan PowerPoint untuk cara menggabungkan data di R Termasuk beberapa file data, PowerPoint, dan skrip R untuk menyertai artikel. Sharon Machlis

Untuk membaca file dengan basis R, pertama-tama saya akan mengekstrak file penundaan penerbangan dan kemudian mengimpor data penundaan penerbangan dan file pencarian kode dengan read.csv(). Jika Anda menjalankan kode, file penundaan yang Anda unduh kemungkinan akan memiliki nama yang berbeda dari pada kode di bawah ini. Juga, perhatikan .csv_ekstensi yang tidak biasa dari file pencarian .

buka zip ("673598238_T_ONTIME_REPORTING.zip")

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

sep = ",", quote = "\" ")

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

quote = "\" ", sep =", ")

Selanjutnya, saya akan mengintip kedua file tersebut dengan 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

kepala (mylookup) Deskripsi Kode 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 Timur

Menggabungkan dengan basis R

Kerangka data penundaan mydf hanya memiliki informasi maskapai penerbangan berdasarkan kode. Saya ingin menambahkan kolom dengan nama maskapai penerbangan dari mylookup. Salah satu cara dasar R untuk melakukan ini adalah dengan merge()fungsi, menggunakan sintaks dasar merge(df1, df2). Tidak masalah urutan data frame 1 dan data frame 2, tetapi yang mana yang pertama dianggap x dan yang kedua adalah y. 

Jika kolom yang ingin Anda gabungkan tidak memiliki nama yang sama, Anda perlu memberi tahu gabungkan kolom mana yang ingin Anda gabungkan: by.xuntuk nama kolom bingkai data x, dan by.yuntuk kolom y, seperti merge(df1, df2, by.x = "df1ColName", by.y = "df2ColName").

Anda juga dapat memberi tahu gabungan apakah Anda ingin semua baris, termasuk baris tanpa kecocokan, atau hanya baris yang cocok, dengan argumen all.xdan all.y. Dalam kasus ini, saya ingin semua baris dari data penundaan; jika tidak ada kode maskapai di tabel pencarian, saya masih menginginkan informasinya. Tetapi saya tidak memerlukan baris dari tabel pencarian yang tidak ada dalam data penundaan (ada beberapa kode untuk maskapai penerbangan lama yang tidak lagi terbang di sana). Jadi, all.xsama TRUEtapi all.ysama FALSE. Kode lengkap:

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

by.y = "Kode", all.x = TRUE, all.y = FALSE)

Kerangka data gabungan baru menyertakan kolom yang disebut Deskripsi dengan nama maskapai penerbangan berdasarkan kode maskapai.

kepala (join_df) OP_UNIQUE_CARRIER FL_DATE ASAL TUJUAN DEP_DELAY_NEW X Deskripsi 1 9E 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 Endeavor Air Inc. 4 9E 2019-08-13 IAH MSP 6 NA Endeavour Air Inc. 5 9E 2019-08-12 DTW JFK 58 NA Endeavor Air Inc. 6 9E 2019-08-12 SYR JFK 0 NA Endeavour Air Inc .

Bergabung dengan dplyr

dplyr menggunakan sintaks database SQL untuk fungsi gabungannya. Sebuah kiri bergabung  sarana: Sertakan semua yang ada di sebelah kiri (apa frame data x di merge()) dan semua baris yang cocok dari kanan (y) frame data. Jika kolom gabungan memiliki nama yang sama, yang Anda butuhkan hanyalah left_join(x, y). Jika mereka tidak memiliki nama yang sama, Anda memerlukan byargumen, seperti left_join(x, y, by = c("df1ColName" = "df2ColName")).

Perhatikan sintaks untuk by: Ini adalah vektor bernama, dengan nama kolom kiri dan kanan dalam tanda kutip.

Kode untuk mengimpor dan menggabungkan kedua set data menggunakan di left_join()bawah ini. Ini dimulai dengan memuat paket dplyr dan readr dan kemudian membaca di dua file dengan read_csv(). Saat menggunakan read_csv(), saya tidak perlu mengekstrak file terlebih dahulu.

perpustakaan (dplyr)

perpustakaan (readr)

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

mylookup_tibble <- read_csv ("L_UNIQUE_CARRIERS.csv_")

join_tibble <- left_join (mytibble, mylookup_tibble,

oleh = c ("OP_UNIQUE_CARRIER" = "Code"))

read_csv()membuat tibbles , yang merupakan jenis bingkai data dengan beberapa fitur tambahan. left_join()menggabungkan keduanya. Lihatlah sintaksnya: Dalam hal ini, urutan itu penting. left_join()berarti menyertakan semua baris di kiri, atau pertama, kumpulan data, tetapi hanya baris yang cocok dari baris kedua . Dan, karena saya perlu bergabung dengan dua kolom bernama berbeda, saya menyertakan byargumen.

Kita dapat melihat struktur hasil dengan glimpse()fungsi dplyr , yang merupakan cara lain untuk melihat beberapa item teratas dari bingkai data.

glimpse (join_tibble) Pengamatan: 658.461 Variabel: 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,… $ Deskripsi "Delta Air Lines Inc.", "Delta Air Lines Inc.", "Delta Air…

Kumpulan data gabungan ini sekarang memiliki kolom baru dengan nama maskapai penerbangan. Jika Anda menjalankan versi kode ini sendiri, Anda mungkin akan melihat bahwa dplyr jauh lebih cepat daripada basis R.

Selanjutnya, mari kita lihat cara super cepat untuk melakukan penggabungan.