R Seleziona (), Filtro (), Disponi (), Pipeline con esempio

Sommario:

Anonim

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## $ 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… 

È 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)head

Produzione:

## 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

Sommario

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, condition1
ondition2)
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