R Επιλέξτε (), Φίλτρο (), Τακτοποίηση (), Αγωγός με Παράδειγμα

Πίνακας περιεχομένων:

Anonim

Σε αυτό το σεμινάριο, θα μάθετε

  • επιλέγω()
  • Φίλτρο()
  • Αγωγός
  • κανονίζω()

Η βιβλιοθήκη που ονομάζεται dplyr περιέχει πολύτιμα ρήματα για πλοήγηση στο σύνολο δεδομένων. Μέσω αυτού του σεμιναρίου, θα χρησιμοποιήσετε το σύνολο δεδομένων Χρόνοι ταξιδιού. Το σύνολο δεδομένων συλλέγει πληροφορίες για τους οδηγούς ταξιδιού από έναν οδηγό μεταξύ του σπιτιού και του χώρου εργασίας του. Υπάρχουν δεκατέσσερις μεταβλητές στο σύνολο δεδομένων, συμπεριλαμβανομένων:

  • DayOfWeek: Προσδιορίστε την ημέρα της εβδομάδας που ο οδηγός χρησιμοποιεί το αυτοκίνητό του
  • Απόσταση: Η συνολική απόσταση του ταξιδιού
  • MaxSpeed: Η μέγιστη ταχύτητα του ταξιδιού
  • TotalTime: Η διάρκεια σε λεπτά του ταξιδιού

Το σύνολο δεδομένων έχει περίπου 200 παρατηρήσεις στο σύνολο δεδομένων και οι διαδρομές πραγματοποιήθηκαν από Δευτέρα έως Παρασκευή.

Πρώτα απ 'όλα, πρέπει:

  • φορτώστε το σύνολο δεδομένων
  • ελέγξτε τη δομή των δεδομένων.

Ένα εύχρηστο χαρακτηριστικό με το dplyr είναι η λειτουργία αναλαμπής (). Αυτή είναι μια βελτίωση σε σχέση με το str (). Μπορούμε να χρησιμοποιήσουμε την αναλαμπή () για να δούμε τη δομή του συνόλου δεδομένων και να αποφασίσουμε ποιος χειρισμός απαιτείται.

library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)

Παραγωγή:

## Observations: 205## Variables: 14## $ X  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,… ## $ Date  1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20… ## $ StartTime  16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3… ## $ DayOfWeek  Friday, Friday, Wednesday, Wednesday, Tuesday,… ## $ GoingTo  Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS… ## $ Distance  51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37… ## $ MaxSpeed  127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2… ## $ AvgSpeed  78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,… ## $ AvgMovingSpeed  84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,… ## $ FuelEconomy  , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89… ## $ TotalTime  39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,… ## $ MovingTime  36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,… ## $ Take407All  No, No, No, No, No, No, No, No, No, No, No, No… ## $ Comments  , , , , , , , , , , , , , , , Put snow tires o… 

Αυτό είναι προφανές ότι η μεταβλητή Σχόλια χρειάζεται περαιτέρω διαγνωστικό. Οι πρώτες παρατηρήσεις της μεταβλητής σχολίων λείπουν μόνο τιμές.

sum(df$Comments =)

Επεξήγηση κώδικα

  • άθροισμα (df $ Σχόλια == ""): Αθροίστε τις παρατηρήσεις ισούται με "" στη στήλη σχόλια από df

Παραγωγή:

## [1] 181 

επιλέγω()

Θα ξεκινήσουμε με το ρήμα select (). Δεν χρειαζόμαστε απαραιτήτως όλες τις μεταβλητές και μια καλή πρακτική είναι να επιλέγουμε μόνο τις μεταβλητές που θεωρείτε σχετικές.

Λείπουν 181 παρατηρήσεις, σχεδόν το 90% του συνόλου δεδομένων. Εάν αποφασίσετε να τους εξαιρέσετε, δεν θα μπορείτε να συνεχίσετε την ανάλυση.

Η άλλη δυνατότητα είναι να αποθέσετε τη μεταβλητή Σχόλιο με το ρήμα select ().

Μπορούμε να επιλέξουμε μεταβλητές με διαφορετικούς τρόπους με select (). Σημειώστε ότι, το πρώτο όρισμα είναι το σύνολο δεδομένων.

- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset.- `select(df, A:C)`: Select all variables from A to C from df dataset.- `select(df, -C)`: Exclude C from the dataset from df dataset.

Μπορείτε να χρησιμοποιήσετε τον τρίτο τρόπο για να αποκλείσετε τη μεταβλητή σχολίων.

step_1_df <- select(df, -Comments)dim(df)

Παραγωγή:

## [1] 205 14
dim(step_1_df)

Παραγωγή:

## [1] 205 13 

Το αρχικό σύνολο δεδομένων έχει 14 δυνατότητες, ενώ το step_1_df έχει 13.

Φίλτρο()

Το ρήμα φίλτρου () βοηθά στη διατήρηση των παρατηρήσεων σύμφωνα με κριτήρια. Το φίλτρο () λειτουργεί ακριβώς όπως select (), περνάτε πρώτα το πλαίσιο δεδομένων και στη συνέχεια μια συνθήκη που διαχωρίζεται με κόμμα:

filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data

Ένα κριτήριο

Πρώτα απ 'όλα, μπορείτε να μετρήσετε τον αριθμό των παρατηρήσεων σε κάθε επίπεδο μιας μεταβλητής παράγοντα.

table(step_1_df$GoingTo)

Επεξήγηση κώδικα

  • πίνακας (): Μετρήστε τον αριθμό των παρατηρήσεων ανά επίπεδο. Σημειώστε ότι γίνονται δεκτές μόνο μεταβλητές επιπέδου παράγοντα
  • table (step_1_df $ GoingTo): Μετρήστε τον αριθμό των ταξιδιών προς τον τελικό προορισμό.

Παραγωγή:

#### GSK Home## 105 100

Ο πίνακας λειτουργίας () υποδεικνύει 105 διαδρομές στο GSK και 100 στο σπίτι.

Μπορούμε να φιλτράρουμε τα δεδομένα για να επιστρέψουμε ένα σύνολο δεδομένων με 105 παρατηρήσεις και ένα άλλο με 100 παρατηρήσεις.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Παραγωγή:

## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)

Παραγωγή:

## [1] 105 14 

Πολλαπλά κριτήρια

Μπορούμε να φιλτράρουμε ένα σύνολο δεδομένων με περισσότερα από ένα κριτήρια. Για παράδειγμα, μπορείτε να εξαγάγετε τις παρατηρήσεις όπου ο προορισμός είναι το σπίτι και πραγματοποιήθηκε την Τετάρτη.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)

Παραγωγή:

## [1] 23 14 

23 παρατηρήσεις ταιριάζουν με αυτό το κριτήριο.

Αγωγός

Η δημιουργία ενός συνόλου δεδομένων απαιτεί πολλές λειτουργίες, όπως:

  • εισαγωγή
  • συγχώνευση
  • επιλέγοντας
  • φιλτράρισμα
  • και ούτω καθεξής

Η βιβλιοθήκη dplyr διαθέτει έναν πρακτικό χειριστή,%>%, που ονομάζεται αγωγός . Η λειτουργία αγωγού καθιστά τον χειρισμό καθαρό, γρήγορο και λιγότερο προτροπή για σφάλματα.

Αυτός ο τελεστής είναι ένας κωδικός που εκτελεί βήματα χωρίς να αποθηκεύει ενδιάμεσα βήματα στον σκληρό δίσκο. Αν επιστρέψετε στο παράδειγμά μας από ψηλά, μπορείτε να επιλέξετε τις μεταβλητές που σας ενδιαφέρουν και να τις φιλτράρετε. Έχουμε τρία βήματα:

  • Βήμα 1: Εισαγωγή δεδομένων: Εισαγάγετε τα δεδομένα gps
  • Βήμα 2: Επιλογή δεδομένων: Επιλέξτε GoingTo και DayOfWeek
  • Βήμα 3: Φιλτράρισμα δεδομένων: Επιστροφή μόνο στο σπίτι και την Τετάρτη

Μπορούμε να χρησιμοποιήσουμε τον σκληρό τρόπο για να το κάνουμε:

# Step 1step_1 <- read.csv(PATH)# Step 2step_2 <- select(step_1, GoingTo, DayOfWeek)# Step 3step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")head(step_3)

Παραγωγή:

## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday

Αυτός δεν είναι ένας βολικός τρόπος εκτέλεσης πολλών λειτουργιών, ειδικά σε μια κατάσταση με πολλά βήματα. Το περιβάλλον καταλήγει με πολλά αντικείμενα αποθηκευμένα.

Ας χρησιμοποιήσουμε τον χειριστή αγωγών%>% αντ 'αυτού. Αρκεί να ορίσουμε το πλαίσιο δεδομένων που χρησιμοποιήθηκε στην αρχή και όλη η διαδικασία θα προέρχεται από αυτό.

Βασική σύνταξη του αγωγού

New_df <- df %>%step 1 %>%step 2 %>%… arguments- New_df: Name of the new data frame- df: Data frame used to compute the step- step: Instruction for each step- Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.

Μπορείτε να δημιουργήσετε τον πρώτο σας σωλήνα ακολουθώντας τα παραπάνω βήματα.

# Create the data frame filter_home_wed.It will be the object return at the end of the pipelinefilter_home_wed <-#Step 1read.csv(PATH) % > %#Step 2select(GoingTo, DayOfWeek) % > %#Step 3filter(GoingTo == "Home",DayOfWeek == "Wednesday")identical(step_3, filter_home_wed)

Παραγωγή:

## [1] TRUE 

Είμαστε έτοιμοι να δημιουργήσουμε ένα εκπληκτικό σύνολο δεδομένων με τον χειριστή του αγωγού.

κανονίζω()

Στο προηγούμενο σεμινάριο, μαθαίνετε πώς να ταξινομήσετε τις τιμές με τη συνάρτηση sort (). Η βιβλιοθήκη dplyr έχει τη λειτουργία ταξινόμησης. Λειτουργεί σαν μια γοητεία με τον αγωγό. Το ρήμα arr () μπορεί να αναδιατάξει μία ή πολλές σειρές, είτε αύξουσα (προεπιλογή) είτε φθίνουσα.

- `arrange(A)`: Ascending sort of variable A- `arrange(A, B)`: Ascending sort of variable A and B- `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B 

Μπορούμε να ταξινομήσουμε την απόσταση ανά προορισμό.

# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

Παραγωγή:

## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All## 1 78.4 8.45 45.7 37.0 No## 2 89.0 8.28 35.6 32.6 Yes## 3 87.3 7.89 38.5 33.3 Yes## 4 77.8 8.45 41.6 37.6 No## 5 93.2 7.81 34.3 31.5 Yes## 6 78.8 8.54 40.4 37.3 No

Περίληψη

Στον παρακάτω πίνακα, συνοψίζετε όλες τις λειτουργίες που μάθατε κατά τη διάρκεια του σεμιναρίου.

Ρήμα Σκοπός Κώδικας Εξήγηση
ματιά ελέγξτε τη δομή ενός df
glimpse(df)
Πανομοιότυπο με str ()
επιλέγω() Επιλέξτε / εξαιρέστε τις μεταβλητές
select(df, A, B ,C)
Επιλέξτε τις μεταβλητές A, B και C
select(df, A:C)
Επιλέξτε όλες τις μεταβλητές από το Α έως το Γ
select(df, -C)
Εξαίρεση Γ
φίλτρο() Φιλτράρετε το df με βάση μία ή πολλές συνθήκες
filter(df, condition1)
Ένας όρος
filter(df, condition1
ondition2)
κανονίζω() Ταξινόμηση του συνόλου δεδομένων με μία ή πολλές μεταβλητές
arrange(A)
Ανερχόμενος τύπος μεταβλητής Α
arrange(A, B)
Ανερχόμενος τύπος μεταβλητής Α και Β
arrange(desc(A), B)
Κατεβαίνοντας είδος μεταβλητής Α και ανερχόμενος Β
%>% Δημιουργήστε έναν αγωγό μεταξύ κάθε βήματος
step 1 %>% step 2 %>% step 3