R Velg(), Filter(), Arranger(), Pipeline med eksempel
Biblioteket kalt dplyr inneholder verdifulle verb for å navigere i datasettet. Gjennom denne opplæringen vil du bruke reisetidsdatasettet. Datasettet samler informasjon om en sjåførs reise mellom hjemmet og arbeidsplassen. Det er fjorten variabler i datasettet, inkludert:
- DayOfWeek: Identifiser ukedagen sjåføren bruker bilen sin
- Distanse: Den totale avstanden på reisen
- MaxSpeed: Maksimal hastighet på reisen
- TotalTime: Lengden i minutter av reisen
Datasettet har rundt 200 observasjoner i datasettet, og turene skjedde mellom Monday til fredag.
Først av alt må du:
- last inn datasettet
- sjekk strukturen til dataene.
En praktisk funksjon med dplyr er glimpse()-funksjonen. Dette er en forbedring i forhold til str(). Vi kan bruke glimpse() for å se strukturen til datasettet og bestemme hvilken manipulasjon som kreves.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Utgang:
## 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...
Dette er åpenbart at variabelen Kommentarer trenger ytterligere diagnostikk. De første observasjonene av Comments-variabelen mangler bare verdier.
sum(df$Comments =="")
Kode Forklaring
- sum(df$Comments ==””): Sum observasjonene tilsvarer “” i kolonnekommentarene fra df
Utgang:
## [1] 181
å velge()
Vi begynner med verbet select(). Vi trenger ikke nødvendigvis alle variablene, og en god praksis er å velge bare de variablene du finner relevante.
Vi har 181 manglende observasjoner, nesten 90 prosent av datasettet. Hvis du bestemmer deg for å ekskludere dem, vil du ikke kunne fortsette analysen.
Den andre muligheten er å droppe variabelen Comment med verbet select().
Vi kan velge variabler på forskjellige måter med select(). Merk at det første argumentet er datasettet.
- `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.
Du kan bruke den tredje måten å ekskludere kommentarvariabelen.
step_1_df <- select(df, -Comments) dim(df)
Utgang:
## [1] 205 14
dim(step_1_df)
Utgang:
## [1] 205 13
Det originale datasettet har 14 funksjoner mens step_1_df har 13.
Filter()
Filter()-verbet hjelper til med å holde observasjonene etter et kriterium. Filteret() fungerer akkurat som select(), du sender først datarammen og deretter en betingelse atskilt med komma:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Ett kriterium
Først av alt kan du telle antall observasjoner innenfor hvert nivå av en faktorvariabel.
table(step_1_df$GoingTo)
Kode Forklaring
- table(): Tell antall observasjoner etter nivå. Merk at kun faktornivåvariabler aksepteres
- table(step_1_df$GoingTo): Tell antall turer mot den endelige destinasjonen.
Utgang:
## ## GSK Home ## 105 100
Funksjonstabellen() indikerer at 105 turer går til GSK og 100 til Hjem.
Vi kan filtrere dataene for å returnere ett datasett med 105 observasjoner og et annet med 100 observasjoner.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Utgang:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Utgang:
## [1] 105 14
Flere kriterier
Vi kan filtrere et datasett med mer enn ett kriterium. Du kan for eksempel trekke ut observasjonene der destinasjonen er Hjem og skjedde på en onsdag.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Utgang:
## [1] 23 14
23 observasjoner samsvarte med dette kriteriet.
Rørledning
Opprettelsen av et datasett krever mange operasjoner, for eksempel:
- importere
- sammenslåing
- velge
- filtrering
- og så videre
Dplyr-biblioteket kommer med en praktisk operatør, %>%, kalt rørledning. Rørledningsfunksjonen gjør manipulasjonen ren, rask og mindre feilsøkende.
Denne operatøren er en kode som utfører trinn uten å lagre mellomtrinn på harddisken. Hvis du er tilbake til eksemplet ovenfor, kan du velge variablene av interesse og filtrere dem. Vi har tre trinn:
- Trinn 1: Importer data: Importer gps-dataene
- Trinn 2: Velg data: Velg GoingTo og DayOfWeek
- Trinn 3: Filtrer data: Returner kun hjem og onsdag
Vi kan bruke den harde måten å gjøre det på:
# 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)
Utgang:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Det er ikke en praktisk måte å utføre mange operasjoner på, spesielt i en situasjon med mange trinn. Miljøet ender opp med mange gjenstander lagret.
La oss bruke rørledningsoperatøren %>% i stedet. Vi trenger bare å definere datarammen som ble brukt i begynnelsen, og hele prosessen vil flyte fra den.
Grunnleggende syntaks for 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 anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
Du kan lage din første pipe ved å følge trinnene som er oppført ovenfor.
# 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)
Utgang:
## [1] TRUE
Vi er klare til å lage et fantastisk datasett med rørledningsoperatøren.
arrangere()
på tidligere opplæring, lærer du hvordan du sorterer verdiene med funksjonen sort(). Biblioteket dplyr har sin sorteringsfunksjon. Det fungerer som en sjarm med rørledningen. Ordet ()-verbet kan omorganisere én eller flere rader, enten stigende (standard) eller synkende.
- `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
Vi kan sortere avstanden etter destinasjon.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Utgang:
## 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
Oppsummering
I tabellen nedenfor oppsummerer du alle operasjonene du lærte under veiledningen.
Verb | Målet | Kode | Forklaring |
---|---|---|---|
glimt | sjekk strukturen til en df |
glimpse(df) |
Identisk med str() |
å velge() | Velg/ekskluder variablene |
select(df, A, B ,C) |
Velg variablene A, B og C |
select(df, A:C) |
Velg alle variabler fra A til C | ||
select(df, -C) |
Ekskluder C | ||
filter() | Filtrer DF basert på en eller flere betingelser |
filter(df, condition1) |
En betingelse |
filter(df, condition1 |
tilstand 2) | ||
arrangere() | Sorter datasettet med én eller flere variabler |
arrange(A) |
Stigende type variabel A |
arrange(A, B) |
Stigende type variabel A og B | ||
arrange(desc(A), B) |
Synkende type variabel A og stigende type B | ||
%>% | Lag en pipeline mellom hvert trinn |
step 1 %>% step 2 %>% step 3 |