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

Rezumaศ›i aceastฤƒ postare cu: