Προγραμματισμός

Πώς να συγχωνεύσετε δεδομένα στο R χρησιμοποιώντας R merge, dplyr ή data.table

Το R έχει έναν αριθμό γρήγορων, κομψών τρόπων για να ενώσει τα πλαίσια δεδομένων από μια κοινή στήλη. Θα ήθελα να σας δείξω τρεις από αυτές:

  • βάση R's συγχώνευση() λειτουργία,
  • Η dplyr συμμετέχει στην οικογένεια λειτουργιών και
  • σύνταξη βραχίονα data.table.

Λήψη και εισαγωγή των δεδομένων

Για αυτό το παράδειγμα, θα χρησιμοποιήσω ένα από τα αγαπημένα μου σύνολα δεδομένων επίδειξης - ώρες καθυστέρησης πτήσης από το Γραφείο Στατιστικών Μεταφορών των ΗΠΑ. Αν θέλετε να ακολουθήσετε, μεταβείτε στη διεύθυνση //bit.ly/USFlightDelays και κατεβάστε δεδομένα για το χρονικό πλαίσιο της επιλογής σας με τις στήλες Ημερομηνία πτήσης, Αναφορά_Αεροπορική εταιρεία, Προέλευση, Προορισμός, και DepartureDelayMinutes. Πάρτε επίσης τον πίνακα αναζήτησης για Αναφορά_Αεροπορική εταιρεία.

Εναλλακτικά, κατεβάστε αυτά τα δύο σύνολα δεδομένων - συν τον κωδικό R σε ένα αρχείο και ένα PowerPoint που εξηγεί διαφορετικούς τύπους συγχωνεύσεων δεδομένων - εδώ:

λήψη κώδικα, δεδομένων και PowerPoint για τον τρόπο συγχώνευσης δεδομένων στο R Περιλαμβάνει πολλά αρχεία δεδομένων, ένα PowerPoint και ένα σενάριο R που συνοδεύει το άρθρο. Sharon Machlis

Για να διαβάσετε στο αρχείο με τη βάση R, πρώτα αποσυμπιέσω το αρχείο καθυστέρησης πτήσης και έπειτα εισήγαγα τόσο δεδομένα καθυστέρησης πτήσης όσο και το αρχείο αναζήτησης κώδικα read.csv (). Εάν εκτελείτε τον κωδικό, το αρχείο καθυστέρησης που κατεβάσατε πιθανότατα θα έχει διαφορετικό όνομα από τον παρακάτω κώδικα. Επίσης, σημειώστε το ασυνήθιστο αρχείο αναζήτησης .csv_ επέκταση.

αποσυμπίεση ("673598238_T_ONTIME_REPORTING.zip")

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

sep = ",", απόσπασμα = "\" ")

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

προσφορά = "\" ", sep =", ")

Στη συνέχεια, θα ρίξω μια ματιά και στα δύο αρχεία κεφάλι():

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 / β / ένα ανατολικό

Συγχωνεύσεις με βάση R

Το πλαίσιο δεδομένων καθυστέρησης mydf έχει μόνο πληροφορίες αεροπορικής εταιρείας ανά κωδικό. Θα ήθελα να προσθέσω μια στήλη με τα ονόματα των αεροπορικών εταιρειών από mylookup. Ένας βασικός τρόπος R για να γίνει αυτό είναι με το συγχώνευση() συνάρτηση, χρησιμοποιώντας τη βασική σύνταξη συγχώνευση (df1, df2). Δεν έχει σημασία η σειρά του πλαισίου δεδομένων 1 και του πλαισίου δεδομένων 2, αλλά όποιο από τα πρώτα θεωρείται x και το δεύτερο είναι y.

Εάν οι στήλες στις οποίες θέλετε να συμμετάσχετε δεν έχουν το ίδιο όνομα, πρέπει να πείτε συγχώνευση με τις στήλες στις οποίες θέλετε να συμμετάσχετε: από.x για το όνομα στήλης πλαισίου δεδομένων x, και από για το y, όπως συγχώνευση (df1, df2, by.x = "df1ColName", by.y = "df2ColName").

Μπορείτε επίσης να πείτε τη συγχώνευση εάν θέλετε όλες τις σειρές, συμπεριλαμβανομένων αυτών που δεν ταιριάζουν, ή μόνο σειρές που ταιριάζουν με τα ορίσματα όλα.x και σύμμαχος. Σε αυτήν την περίπτωση, θα ήθελα όλες οι σειρές από τα δεδομένα καθυστέρησης. αν δεν υπάρχει κωδικός αεροπορικής εταιρείας στον πίνακα αναζήτησης, εξακολουθώ να θέλω τις πληροφορίες. Αλλά δεν χρειάζομαι σειρές από τον πίνακα αναζήτησης που δεν περιλαμβάνονται στα δεδομένα καθυστέρησης (υπάρχουν ορισμένοι κωδικοί για παλιές αεροπορικές εταιρείες που δεν πετούν πια εκεί). Ετσι, όλα.x ισούται ΑΛΗΘΗΣ αλλά σύμμαχος ισούται ΨΕΥΔΗΣ. Πλήρης κωδικός:

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

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

Το νέο ενωμένο πλαίσιο δεδομένων περιλαμβάνει μια στήλη που ονομάζεται Περιγραφή με το όνομα της αεροπορικής εταιρείας με βάση τον κωδικό της εταιρείας.

head (Join_df) OP_UNIQUE_CARRIER FL_DATE ORIGIN DEST DEP_DELAY_NEW X Περιγραφή 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 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 συγχώνευση()) και όλες οι σειρές που ταιριάζουν από το δεξί (y) πλαίσιο δεδομένων. Εάν οι στήλες σύνδεσης έχουν το ίδιο όνομα, το μόνο που χρειάζεστε είναι left_join (x, y). Εάν δεν έχουν το ίδιο όνομα, χρειάζεστε ένα με επιχείρημα, όπως left_join (x, y, by = c ("df1ColName" = "df2ColName"))) .

Σημειώστε τη σύνταξη για με: Είναι ένα όνομα φορέα, με τα αριστερά και τα δεξιά ονόματα στηλών σε εισαγωγικά.

Ο κωδικός για εισαγωγή και συγχώνευση και των δύο συνόλων δεδομένων χρησιμοποιώντας αριστερά_σύνδεση () είναι παρακάτω. Ξεκινά με τη φόρτωση των πακέτων dplyr και readr και στη συνέχεια διαβάζει στα δύο αρχεία με read_csv (). Οταν χρησιμοποιείτε read_csv (), Δεν χρειάζεται να αποσυμπιέσω πρώτα το αρχείο.

βιβλιοθήκη (dplyr)

βιβλιοθήκη (readr)

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

mylookup_tibble <- read_csv ("L_UNIQUE_CARRIERS.csv_")

join_tibble <- left_join (mytibble, mylookup_tibble,

από = c ("OP_UNIQUE_CARRIER" = "Κωδικός"))

read_csv () δημιουργεί βότσαλα, που είναι ένας τύπος πλαισίου δεδομένων με ορισμένες επιπλέον δυνατότητες. αριστερά_σύνδεση () συγχωνεύει τα δύο. Ρίξτε μια ματιά στη σύνταξη: Σε αυτήν την περίπτωση, η παραγγελία έχει σημασία. αριστερά_σύνδεση () που σημαίνει συμπεριλάβετε όλες τις σειρές στα αριστερά ή πρώτα το σύνολο δεδομένων, αλλά μόνο σειρές που ταιριάζουν με τη δεύτερη. Και, επειδή πρέπει να ενώσω δύο στήλες με διαφορετικό όνομα, συμπεριέλαβα ένα με διαφωνία.

Μπορούμε να δούμε τη δομή του αποτελέσματος με το dplyr's ματιά() συνάρτηση, που είναι ένας άλλος τρόπος για να δείτε τα κορυφαία λίγα στοιχεία ενός πλαισίου δεδομένων.

glimpse (Join_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,… $ Περιγραφή "Delta Air Lines Inc.", "Delta Air Lines Inc.", " Delta Air…

Αυτό το ενωμένο σύνολο δεδομένων έχει τώρα μια νέα στήλη με το όνομα της αεροπορικής εταιρείας. Εάν εκτελέσετε μόνοι σας μια έκδοση αυτού του κώδικα, πιθανότατα θα παρατηρήσετε ότι το dplyr ήταν πολύ πιο γρήγορο από το base R.

Στη συνέχεια, ας δούμε έναν εξαιρετικά γρήγορο τρόπο συμμετοχής.