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 =="")
Code Explicaศie
- 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)
Code Explicaศie
- 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 extracobservaศiile รฎn care destinaศia este Acasฤ ศi au avut loc 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 | Code | 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 |
