R Selectare(), Filtru (), Aranjare(), Pipeline cu Exemplu
Biblioteca numită dplyr conține verbe valoroase pentru a naviga în interiorul setului de date. Prin acest tutorial, veți folosi setul de date Timp de călătorie. Setul de date colectează informații despre călătoria efectuată de un șofer între locuință și locul de muncă. Există paisprezece variabile în setul de date, inclusiv:
- DayOfWeek: identificați ziua din săptămână în care șoferul își folosește mașina
- Distanță: distanța totală a călătoriei
- MaxSpeed: Viteza maximă a călătoriei
- TotalTime: lungimea în minute a călătoriei
Setul de date are aproximativ 200 de observații în setul de date, iar călătoriile au avut loc între Monday până vineri.
În primul rând, trebuie să:
- încărcați setul de date
- verifica structura datelor.
O caracteristică utilă cu dplyr este funcția glimpse(). Aceasta este o îmbunătățire față de str(). Putem folosi glimpse() pentru a vedea structura setului de date și pentru a decide ce manipulare este necesară.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
ieșire:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
Acest lucru este evident că variabila Comentarii necesită un diagnostic suplimentar. Primele observații ale variabilei Comentarii sunt doar valori lipsă.
sum(df$Comments =="")
Explicarea codului
- sum(df$Comments ==””): Suma observațiile este egală cu „” în coloana comentarii din df
ieșire:
## [1] 181
Selectați()
Vom începe cu verbul select(). Nu avem neapărat nevoie de toate variabilele, iar o bună practică este să selectați doar variabilele pe care le considerați relevante.
Avem 181 de observații lipsă, aproape 90 la sută din setul de date. Dacă decideți să le excludeți, nu veți putea continua analiza.
Cealaltă posibilitate este să renunți la variabila Comentariu cu verbul select().
Putem selecta variabile în moduri diferite cu select(). Rețineți că primul argument este setul de date.
- `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.
Puteți utiliza a treia modalitate de a exclude variabila Comentarii.
step_1_df <- select(df, -Comments) dim(df)
ieșire:
## [1] 205 14
dim(step_1_df)
ieșire:
## [1] 205 13
Setul de date original are 14 caracteristici, în timp ce step_1_df are 13.
Filtru()
Verbul filter() ajută la păstrarea observațiilor după un criteriu. Filter() funcționează exact ca select(), treci mai întâi cadrul de date și apoi o condiție separată prin virgulă:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Un singur criteriu
În primul rând, puteți număra numărul de observații din fiecare nivel al unei variabile factor.
table(step_1_df$GoingTo)
Explicarea codului
- table(): numărați numărul de observații pe nivel. Rețineți că sunt acceptate doar variabilele la nivel de factor
- table(step_1_df$GoingTo): numărați numărul de călătorii către destinația finală.
ieșire:
## ## GSK Home ## 105 100
Tabelul de funcții() indică 105 curse către GSK și 100 către Acasă.
Putem filtra datele pentru a returna un set de date cu 105 de observații și altul cu 100 de observații.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
ieșire:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
ieșire:
## [1] 105 14
Criterii multiple
Putem filtra un set de date cu mai multe criterii. De exemplu, puteți extrage observațiile unde destinația este Acasă și a avut loc într-o zi de miercuri.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
ieșire:
## [1] 23 14
23 de observații corespund acestui criteriu.
Conductă
Crearea unui set de date necesită o mulțime de operațiuni, cum ar fi:
- importatoare
- care fuzionează
- selectarea
- filtrare
- și așa mai departe
Biblioteca dplyr vine cu un operator practic, %>%, numit conducte. Caracteristica pipeline face ca manipularea să fie curată, rapidă și mai puțin promptă la eroare.
Acest operator este un cod care efectuează pași fără a salva pașii intermediari pe hard disk. Dacă reveniți la exemplul nostru de mai sus, puteți selecta variabilele de interes și le puteți filtra. Avem trei pași:
- Pasul 1: importați date: importați datele GPS
- Pasul 2: Selectați datele: selectați GoingTo și DayOfWeek
- Pasul 3: Filtrați datele: Reveniți numai acasă și miercuri
Putem folosi modul greu de a face acest lucru:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
ieșire:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Acesta nu este o modalitate convenabilă de a efectua multe operații, mai ales într-o situație cu mulți pași. Mediul se termină cu o mulțime de obiecte stocate.
Să folosim în schimb operatorul pipeline %>%. Trebuie doar să definim cadrul de date folosit la început și tot procesul va decurge din acesta.
Sintaxa de bază a conductei
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 anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
Puteți crea prima conductă urmând pașii enumerați mai sus.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
ieșire:
## [1] TRUE
Suntem gata să creăm un set de date uimitor cu operatorul conductei.
aranja()
În tutorialul anterior, înveți cum să sortezi valorile cu funcția sort(). Biblioteca dplyr are funcția de sortare. Funcționează ca un farmec cu conducta. Verbul arrange() poate reordona unul sau mai multe rânduri, fie crescător (implicit), fie descrescător.
- `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
Putem sorta distanța după destinație.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
ieșire:
## 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
Rezumat
În tabelul de mai jos, rezumați toate operațiunile pe care le-ați învățat în timpul tutorialului.
Verb | Obiectiv | Cod | Explicație |
---|---|---|---|
licărire | verifica structura unui df |
glimpse(df) |
Identic cu str() |
Selectați() | Selectați/excludeți variabilele |
select(df, A, B ,C) |
Selectați variabilele A, B și C |
select(df, A:C) |
Selectați toate variabilele de la A la C | ||
select(df, -C) |
Excludeți C | ||
filtru() | Filtrați df în funcție de una sau mai multe condiții |
filter(df, condition1) |
O condiție |
filter(df, condition1 |
condiție 2) | ||
aranja() | Sortați setul de date cu una sau mai multe variabile |
arrange(A) |
Sort crescător de variabilă A |
arrange(A, B) |
Sort crescător de variabile A și B | ||
arrange(desc(A), B) |
Variabila descendentă A și ascendentă B | ||
%>% | Creați o conductă între fiecare pas |
step 1 %>% step 2 %>% step 3 |