R Välj (), Filter (), Ordna (), Rörledning med exempel

Innehållsförteckning:

Anonim

I den här handledningen lär du dig

  • Välj()
  • Filtrera()
  • Rörledning
  • ordna()

Biblioteket som heter dplyr innehåller värdefulla verb att navigera in i datasetet. Genom den här självstudien kommer du att använda datasetet Resetider. Datauppsättningen samlar information om resan leder av en förare mellan sitt hem och sin arbetsplats. Det finns fjorton variabler i datasetet, inklusive:

  • DayOfWeek: Identifiera veckodagen som föraren använder sin bil
  • Distans: Resans totala avstånd
  • MaxSpeed: Den maximala hastigheten på resan
  • Total tid: resans längd i minuter

Datauppsättningen har cirka 200 observationer i datasetet och åkattraktionerna inträffade mellan måndag och fredag.

Först och främst måste du:

  • ladda datauppsättningen
  • kontrollera datastrukturen.

En praktisk funktion med dplyr är funktionen glimpse (). Detta är en förbättring jämfört med str (). Vi kan använda glimpse () för att se strukturen i datasetet 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  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… 

Detta är uppenbart att variabeln Kommentarer behöver diagnostiseras ytterligare. De första observationerna av variabeln Kommentarer saknar endast värden.

sum(df$Comments =)

Kodförklaring

  • sum (df $ Comments == ""): Sammanfatta observationerna lika med "" i kolumnkommentarerna från df

Produktion:

## [1] 181 

Välj()

Vi börjar med select () verbet. Vi behöver inte nödvändigtvis alla variabler, och en god praxis är att bara välja de variabler som du tycker är relevanta.

Vi har 181 observationer som saknas, nästan 90 procent av datasetet. 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 Kommentar med select () verbet.

Vi kan välja variabler på olika sätt med select (). Observera att det första argumentet är datamängden.

- `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 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 datasetet har 14 funktioner medan step_1_df har 13.

Filtrera()

Filteret () verb hjälper till att hålla observationerna efter ett kriterium. Filtret () fungerar precis som select (), du skickar dataramen först och sedan ett tillstånd åtskilt med ett komma:

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å för en faktorvariabel.

table(step_1_df$GoingTo)

Kodförklaring

  • tabell (): Räkna antalet observationer efter nivå. Observera att endast variabel på faktornivå accepteras
  • tabell (step_1_df $ GoingTo): Räkna antalet resor mot den slutliga destinationen.

Produktion:

#### GSK Home## 105 100

Funktionstabellen () indikerar att 105 åkor går till GSK och 100 till hemma.

Vi kan filtrera data för att returnera en dataset med 105 observationer och en annan med 100 observationer.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Produktion:

## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)

Produktion:

## [1] 105 14 

Flera kriterier

Vi kan filtrera en dataset 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.

Rörledning

Skapandet av en dataset kräver många operationer, till exempel:

  • importerar
  • sammanslagning
  • väljer
  • filtrering
  • och så vidare

Dplyr-biblioteket levereras med en praktisk operatör,%>%, kallad pipeline . Rörledningsfunktionen gör manipuleringen ren, snabb och mindre snabb till 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 svåra sättet att göra det:

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

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 många föremål lagrade.

Låt oss använda rörledningsoperatören%>% istället. Vi behöver bara definiera den dataram som används i början och hela processen kommer att strömma 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 anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.

Du kan skapa ditt första rör enligt stegen ovan.

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

Produktion:

## [1] TRUE 

Vi är redo att skapa en fantastisk dataset med pipelineoperatören.

ordna()

I föregående handledning lär du dig hur man sorterar värdena med funktionssorteringen (). Biblioteket dplyr har sin sorteringsfunktion. Det fungerar som en charm med rörledningen. Arrangera () verbet kan ordna om 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 distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

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 självstudien.

Verb Mål Koda Förklaring
glimt kontrollera strukturen för en df
glimpse(df)
Identiskt 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
ondition2)
ordna() Sortera datasetet med en eller flera variabler
arrange(A)
Stigande typ av variabel A
arrange(A, B)
Stigande typ av variabel A och B
arrange(desc(A), B)
Fallande typ av variabel A och stigande typ av B
%>% Skapa en pipeline mellan varje steg
step 1 %>% step 2 %>% step 3