R Vælg(), Filter(), Arranger(), Pipeline med eksempel
Biblioteket kaldet dplyr indeholder værdifulde verber til at navigere inde i datasættet. Gennem denne tutorial vil du bruge rejsetidsdatasættet. Datasættet indsamler information om en chaufførs tur mellem sit hjem og sin arbejdsplads. Der er fjorten variabler i datasættet, herunder:
- DayOfWeek: Identificer den ugedag chaufføren bruger sin bil
- Distance: Rejsens samlede distance
- MaxSpeed: Rejsens maksimale hastighed
- TotalTime: Rejsens længde i minutter
Datasættet har omkring 200 observationer i datasættet, og turene fandt sted mellem Monday til fredag.
Først og fremmest skal du:
- indlæse datasættet
- kontrollere strukturen af dataene.
En praktisk funktion med dplyr er glimpse()-funktionen. Dette er en forbedring i forhold til str(). Vi kan bruge glimpse() til at se strukturen af datasættet og beslutte, hvilken manipulation der kræves.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Output:
## 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 indlysende, at variablen Kommentarer har brug for yderligere diagnosticering. De første observationer af kommentarvariablen mangler kun værdier.
sum(df$Comments =="")
Kode Forklaring
- sum(df$Comments ==””): Sum observationerne svarer til “” i kolonnekommentarerne fra df
Output:
## [1] 181
Vælg()
Vi begynder med udsagnsordet select(). Vi har ikke nødvendigvis brug for alle variablerne, og en god praksis er kun at vælge de variabler, du finder relevante.
Vi har 181 manglende observationer, næsten 90 procent af datasættet. Hvis du beslutter dig for at udelukke dem, vil du ikke være i stand til at fortsætte analysen.
Den anden mulighed er at droppe variablen Comment med udsagnsordet select().
Vi kan vælge variable på forskellige måder med select(). Bemærk, at det første argument er datasættet.
- `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 bruge den tredje måde til at udelukke variablen Kommentarer.
step_1_df <- select(df, -Comments) dim(df)
Output:
## [1] 205 14
dim(step_1_df)
Output:
## [1] 205 13
Det originale datasæt har 14 funktioner, mens step_1_df har 13.
Filter()
Filter()-verbet hjælper med at holde observationerne efter et kriterium. Filteret() fungerer præcis som select(), du sender først datarammen og derefter en betingelse adskilt af et komma:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Et kriterium
Først og fremmest kan du tælle antallet af observationer inden for hvert niveau af en faktorvariabel.
table(step_1_df$GoingTo)
Kode Forklaring
- table(): Tæl antallet af observationer efter niveau. Bemærk, kun faktorniveauvariabler accepteres
- table(step_1_df$GoingTo): Tæl antallet af ture mod den endelige destination.
Output:
## ## GSK Home ## 105 100
Funktionstabellen() angiver, at 105 ture går til GSK og 100 til Home.
Vi kan filtrere dataene for at returnere et datasæt med 105 observationer og et andet med 100 observationer.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Output:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Output:
## [1] 105 14
Flere kriterier
Vi kan filtrere et datasæt med mere end ét kriterium. For eksempel kan du udtrække observationerne, hvor destinationen er Hjem og fandt sted på en onsdag.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Output:
## [1] 23 14
23 observationer matchede dette kriterium.
Pipeline
Oprettelse af et datasæt kræver en masse operationer, såsom:
- importere
- sammenlægning
- udvælgelse
- filtrering
- og så videre
dplyr-biblioteket leveres med en praktisk operatør, %>%, kaldet pipeline. Pipeline-funktionen gør manipulationen ren, hurtig og mindre hurtig til fejl.
Denne operatør er en kode, der udfører trin uden at gemme mellemtrin på harddisken. Hvis du er tilbage til vores eksempel fra oven, kan du vælge variablerne af interesse og filtrere dem. Vi har tre trin:
- Trin 1: Importer data: Importer gps-dataene
- Trin 2: Vælg data: Vælg GoingTo og DayOfWeek
- Trin 3: Filtrer data: Retur kun hjem og onsdag
Vi kan bruge den hårde måde at gø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)
Output:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Det er ikke en bekvem måde at udføre mange operationer på, især i en situation med mange trin. Miljøet ender med en masse genstande gemt.
Lad os bruge pipeline-operatøren %>% i stedet. Vi behøver kun at definere den dataramme, der blev brugt i begyndelsen, og hele processen vil flyde fra den.
Grundlæggende 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 oprette din første pipe ved at følge de trin, der er opregnet 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)
Output:
## [1] TRUE
Vi er klar til at skabe et fantastisk datasæt med pipeline-operatøren.
arrangere()
I tidligere vejledning, lærer du, hvordan du sorterer værdierne med funktionen sort(). Biblioteket dplyr har sin sorteringsfunktion. Det fungerer som en charme med rørledningen. Ordet arrangere() kan omarrangere en eller mange rækker, enten stigende (standard) eller faldende.
- `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 afstanden efter destination.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Output:
## 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
Resumé
I tabellen nedenfor opsummerer du alle de operationer, du lærte under selvstudiet.
Udsagnsord | Objektiv | Kode | Forklaring |
---|---|---|---|
glimt | kontrollere strukturen af en df |
glimpse(df) |
Identisk med str() |
Vælg() | Vælg/ekskluder variablerne |
select(df, A, B ,C) |
Vælg variablerne A, B og C |
select(df, A:C) |
Vælg alle variabler fra A til C | ||
select(df, -C) |
Udelad C | ||
filter() | Filtrer DF baseret på en eller flere betingelser |
filter(df, condition1) |
En betingelse |
filter(df, condition1 |
tilstand 2) | ||
arrangere() | Sorter datasættet med en eller flere variabler |
arrange(A) |
Stigende slags variabel A |
arrange(A, B) |
Stigende slags variabel A og B | ||
arrange(desc(A), B) |
Faldende slags variabel A og stigende slags B | ||
%>% | Opret en pipeline mellem hvert trin |
step 1 %>% step 2 %>% step 3 |