R Välj(), Filter(), Arrangera(), Pipeline med exempel
Biblioteket som heter dplyr innehåller värdefulla verb för att navigera i datamängden. Genom denna handledning kommer du att använda datasetet Restider. Datauppsättningen samlar information om en förares resa mellan sitt hem och sin arbetsplats. Det finns fjorton variabler i datamängden, inklusive:
- DayOfWeek: Identifiera vilken dag i veckan föraren använder sin bil
- Distans: Resans totala sträcka
- MaxSpeed: Resans maximala hastighet
- TotalTime: Resans längd i minuter
Datauppsättningen har cirka 200 observationer i datamängden, och åkerna skedde mellan Monday till fredag.
Först och främst måste du:
- ladda datauppsättningen
- kontrollera strukturen på datan.
En praktisk funktion med dplyr är glimpse()-funktionen. Detta är en förbättring jämfört med str(). Vi kan använda glimpse() för att se strukturen för datamängden och bestämma vilken manipulation som krävs.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Produktion:
## 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...
Detta är uppenbart att variabeln Kommentarer behöver ytterligare diagnostik. De första observationerna av variabeln Kommentarer saknar bara värden.
sum(df$Comments =="")
Kodförklaring
- sum(df$Comments ==””): Summa observationerna är lika med “” i kolumnkommentarerna från df
Produktion:
## [1] 181
Välj()
Vi börjar med verbet select(). Vi behöver inte nödvändigtvis alla variabler, och en god praxis är att bara välja de variabler du tycker är relevanta.
Vi har 181 saknade observationer, nästan 90 procent av datamängden. Om du bestämmer dig för att utesluta dem kommer du inte att kunna fortsätta analysen.
Den andra möjligheten är att släppa variabeln Comment med verbet select().
Vi kan välja variabler på olika sätt med select(). Observera att det första argumentet är datasetet.
- `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 använda det tredje sättet för att utesluta variabeln Kommentarer.
step_1_df <- select(df, -Comments) dim(df)
Produktion:
## [1] 205 14
dim(step_1_df)
Produktion:
## [1] 205 13
Den ursprungliga datamängden har 14 funktioner medan step_1_df har 13.
Filtrera()
Verbet filter() hjälper till att hålla observationerna efter ett kriterium. Filtret() fungerar precis som select(), du skickar dataramen först och sedan ett villkor separerat med kommatecken:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Ett kriterium
Först och främst kan du räkna antalet observationer inom varje nivå av en faktorvariabel.
table(step_1_df$GoingTo)
Kodförklaring
- table(): Räkna antalet observationer efter nivå. Observera att endast faktornivåvariabler accepteras
- table(step_1_df$GoingTo): Räkna antalet resor mot slutdestinationen.
Produktion:
## ## GSK Home ## 105 100
Funktionstabellen() indikerar att 105 åk går till GSK och 100 till Home.
Vi kan filtrera data för att returnera en datauppsättning med 105 observationer och en annan med 100 observationer.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Produktion:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Produktion:
## [1] 105 14
Flera kriterier
Vi kan filtrera en datauppsättning med mer än ett kriterium. Du kan till exempel extrahera observationerna där destinationen är Hemma och inträffade på en onsdag.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Produktion:
## [1] 23 14
23 observationer matchade detta kriterium.
Pipeline
Skapandet av en datauppsättning kräver en hel del operationer, såsom:
- importera
- sammanslagning
- väljer
- filtrering
- och så vidare
Dplyr-biblioteket kommer med en praktisk operatör, %>%, kallad rörledning. Pipeline-funktionen gör manipulationen ren, snabb och mindre snabb att göra fel.
Denna operatör är en kod som utför steg utan att spara mellansteg på hårddisken. Om du är tillbaka till vårt exempel från ovan kan du välja variabler av intresse och filtrera dem. Vi har tre steg:
- Steg 1: Importera data: Importera gps-data
- Steg 2: Välj data: Välj GoingTo och DayOfWeek
- Steg 3: Filtrera data: Återvänd endast hem och onsdag
Vi kan använda det hårda sättet att göra det:
# 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)
Produktion:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Det är inte ett bekvämt sätt att utföra många operationer, särskilt i en situation med många steg. Miljön slutar med en massa föremål lagrade.
Låt oss använda pipeline-operatören %>% istället. Vi behöver bara definiera dataramen som används i början och hela processen kommer att flöda från den.
Grundläggande syntax för 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 skapa din första pipe genom att följa stegen ovan.
# 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)
Produktion:
## [1] TRUE
Vi är redo att skapa en fantastisk datauppsättning med pipelineoperatören.
ordna()
I tidigare handledning, lär du dig hur du sorterar värdena med funktionen sort(). Biblioteket dplyr har sin sorteringsfunktion. Det fungerar som en smäck med pipeline. Verbet arrange() kan ändra ordningen på en eller flera rader, antingen stigande (standard) eller fallande.
- `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 sortera avståndet efter destination.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Produktion:
## 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
Sammanfattning
I tabellen nedan sammanfattar du alla operationer du lärde dig under handledningen.
Verb | Mål | Koda | Förklaring |
---|---|---|---|
glimt | kontrollera strukturen för en df |
glimpse(df) |
Identisk med str() |
Välj() | Välj/uteslut variablerna |
select(df, A, B ,C) |
Välj variablerna A, B och C |
select(df, A:C) |
Välj alla variabler från A till C | ||
select(df, -C) |
Uteslut C | ||
filtrera() | Filtrera DF baserat på ett eller flera villkor |
filter(df, condition1) |
Ett villkor |
filter(df, condition1 |
tillstånd 2) | ||
ordna() | Sortera datasetet med en eller flera variabler |
arrange(A) |
Stigande sorts variabel A |
arrange(A, B) |
Stigande sorts variabel A och B | ||
arrange(desc(A), B) |
Fallande sorts variabel A och stigande sorts B | ||
%>% | Skapa en pipeline mellan varje steg |
step 1 %>% step 2 %>% step 3 |