In questo tutorial imparerai
- Selezionare()
- Filtro()
- Tubatura
- organizzare()
La libreria chiamata dplyr contiene verbi preziosi per navigare all'interno del set di dati. Attraverso questo tutorial, utilizzerai il set di dati Travel times. Il set di dati raccoglie informazioni sul viaggio condotto da un conducente tra la sua casa e il suo posto di lavoro. Ci sono quattordici variabili nel set di dati, tra cui:
- DayOfWeek: identifica il giorno della settimana in cui il conducente utilizza la sua auto
- Distanza: la distanza totale del viaggio
- MaxSpeed: la velocità massima del viaggio
- TotalTime: la durata in minuti del viaggio
Il set di dati contiene circa 200 osservazioni nel set di dati e le corse si sono verificate tra il lunedì e il venerdì.
Prima di tutto, devi:
- caricare il set di dati
- controllare la struttura dei dati.
Una caratteristica utile con dplyr è la funzione glimpse (). Questo è un miglioramento rispetto a str (). Possiamo usare glimpse () per vedere la struttura del set di dati e decidere quale manipolazione è richiesta.
library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)
Produzione:
## Observations: 205## Variables: 14## $ X1, 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…
È ovvio che la variabile Commenti necessita di ulteriore diagnostica. Le prime osservazioni della variabile Commenti sono solo valori mancanti.
sum(df$Comments =)
Spiegazione del codice
- sum (df $ Comments == ""): somma le osservazioni pari a "" nella colonna commenti da df
Produzione:
## [1] 181
Selezionare()
Inizieremo con il verbo select (). Non abbiamo necessariamente bisogno di tutte le variabili e una buona pratica è selezionare solo le variabili che ritieni rilevanti.
Abbiamo 181 osservazioni mancanti, quasi il 90% del set di dati. Se decidi di escluderli, non potrai proseguire l'analisi.
L'altra possibilità è rilasciare la variabile Comment con il verbo select ().
Possiamo selezionare le variabili in diversi modi con select (). Nota che il primo argomento è il set di dati.
- `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.
È possibile utilizzare il terzo modo per escludere la variabile Commenti.
step_1_df <- select(df, -Comments)dim(df)
Produzione:
## [1] 205 14
dim(step_1_df)
Produzione:
## [1] 205 13
Il set di dati originale ha 14 funzioni mentre il passaggio_1_df ne ha 13.
Filtro()
Il verbo filter () aiuta a mantenere le osservazioni seguendo un criterio. Filter () funziona esattamente come select (), si passa prima il data frame e poi una condizione separata da una virgola:
filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data
Un criterio
Prima di tutto, puoi contare il numero di osservazioni all'interno di ogni livello di una variabile fattore.
table(step_1_df$GoingTo)
Spiegazione del codice
- table (): conta il numero di osservazioni per livello. Nota, sono accettate solo le variabili a livello di fattore
- table (step_1_df $ GoingTo): conta il numero di viaggi verso la destinazione finale.
Produzione:
#### GSK Home## 105 100
La tabella delle funzioni () indica che 105 corse stanno andando a GSK e 100 a Home.
Possiamo filtrare i dati per restituire un set di dati con 105 osservazioni e un altro con 100 osservazioni.
# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)
Produzione:
## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)
Produzione:
## [1] 105 14
Criteri multipli
Possiamo filtrare un set di dati con più di un criterio. Ad esempio, puoi estrarre le osservazioni in cui la destinazione è Casa e si è verificata di mercoledì.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)
Produzione:
## [1] 23 14
23 osservazioni soddisfacevano questo criterio.
Tubatura
La creazione di un set di dati richiede molte operazioni, come ad esempio:
- importazione
- fusione
- selezionando
- filtraggio
- e così via
La libreria dplyr viene fornita con un pratico operatore,%>%, chiamato pipeline . La funzione pipeline rende la manipolazione pulita, veloce e meno sollecita all'errore.
Questo operatore è un codice che esegue passaggi senza salvare passaggi intermedi sul disco rigido. Se torni al nostro esempio dall'alto, puoi selezionare le variabili di interesse e filtrarle. Abbiamo tre passaggi:
- Passaggio 1: importa i dati: importa i dati GPS
- Passaggio 2: selezionare i dati: selezionare GoingTo e DayOfWeek
- Passaggio 3: Filtra i dati: torna solo a casa e mercoledì
Possiamo usare il modo più duro per farlo:
# 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)
Produzione:
## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday
Questo non è un modo conveniente per eseguire molte operazioni, soprattutto in una situazione con molti passaggi. L'ambiente finisce con molti oggetti immagazzinati.
Usiamo invece l'operatore pipeline%>%. Abbiamo solo bisogno di definire il frame di dati utilizzato all'inizio e tutto il processo fluirà da esso.
Sintassi di base della pipeline
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.
Puoi creare la tua prima pipe seguendo i passaggi sopra elencati.
# 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)
Produzione:
## [1] TRUE
Siamo pronti per creare uno straordinario set di dati con l'operatore della pipeline.
organizzare()
Nel tutorial precedente, imparerai come ordinare i valori con la funzione sort (). La libreria dplyr ha la sua funzione di ordinamento. Funziona come un incantesimo con il gasdotto. Il verbo organizzare () può riordinare una o più righe, in ordine crescente (predefinito) o discendente.
- `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
Possiamo ordinare la distanza per destinazione.
# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)headProduzione:
## 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 NoSommario
Nella tabella seguente riassumi tutte le operazioni apprese durante il tutorial.
Verbo Obbiettivo Codice Spiegazione intravedere controllare la struttura di un df glimpse(df)Identico a str () Selezionare() Seleziona / escludi le variabili select(df, A, B ,C)Seleziona le variabili A, B e C select(df, A:C)Seleziona tutte le variabili da A a C select(df, -C)Escludi C filtro() Filtra il df in base a una o più condizioni filter(df, condition1)Una condizione filter(df, condition1ondition2) organizzare() Ordina il set di dati con una o più variabili arrange(A)Tipo crescente di variabile A arrange(A, B)Ordinamento crescente delle variabili A e B arrange(desc(A), B)Ordinamento decrescente di variabile A e ordinamento crescente di B %>% Crea una pipeline tra ogni passaggio step 1 %>% step 2 %>% step 3