R Selectați (), Filtru (), Aranjați (), Pipeline cu Exemplu

Cuprins:

Anonim

În acest tutorial, veți învăța

  • Selectați()
  • Filtru()
  • Conductă
  • aranja()

Biblioteca numită dplyr conține verbe valoroase pentru a naviga în setul de date. Prin intermediul acestui tutorial, veți utiliza setul de date Timpuri de călătorie. Setul de date colectează informații despre călătoria condusă de un șofer între casa și locul său de muncă. Există paisprezece variabile în setul de date, inclusiv:

  • DayOfWeek: Identificați ziua săptămânii în care șoferul își folosește mașina
  • Distanță: distanța totală a călătoriei
  • MaxSpeed: viteza maximă a călătoriei
  • TotalTime: lungimea în minute a călătoriei

Setul de date conține în jur de 200 de observații în setul de date, iar plimbările au avut loc între luni și vineri.

În primul rând, trebuie să:

  • încărcați setul de date
  • verificați structura datelor.

O caracteristică utilă cu dplyr este funcția glimpse (). Aceasta este o îmbunătățire față de str (). Putem folosi glimpse () pentru a vedea structura setului de date și pentru a decide ce manipulare este necesară.

library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)

Ieșire:

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

Acest lucru este evident că variabila Comentarii necesită un diagnostic suplimentar. Primele observații ale variabilei Comments sunt doar valori lipsă.

sum(df$Comments =)

Explicarea codului

  • sum (df $ Comments == ""): Suma observațiilor este egală cu "" în coloana comentarii de la df

Ieșire:

## [1] 181 

Selectați()

Vom începe cu verbul select (). Nu avem neapărat nevoie de toate variabilele și o bună practică este să selectați numai variabilele pe care le considerați relevante.

Avem 181 de observații lipsă, aproape 90% din setul de date. Dacă decideți să le excludeți, nu veți putea continua analiza.

Cealaltă posibilitate este de a renunța la variabila Comentariu cu verbul select ().

Putem selecta variabile în diferite moduri cu select (). Rețineți că, primul argument este setul de date.

- `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.

Puteți utiliza a treia modalitate de a exclude variabila Comentarii.

step_1_df <- select(df, -Comments)dim(df)

Ieșire:

## [1] 205 14
dim(step_1_df)

Ieșire:

## [1] 205 13 

Setul de date original are 14 caracteristici, în timp ce step_1_df are 13.

Filtru()

Verbul filter () ajută la menținerea observațiilor urmând un criteriu. Filtrul () funcționează exact ca select (), treceți mai întâi cadrul de date și apoi o condiție separată printr-o virgulă:

filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data

Un criteriu

În primul rând, puteți număra numărul de observații din fiecare nivel al unei variabile factor.

table(step_1_df$GoingTo)

Explicarea codului

  • table (): Numărați numărul de observații după nivel. Notă, sunt acceptate numai variabile de nivel factor
  • table (step_1_df $ GoingTo): Numărați numărul de călătorii către destinația finală.

Ieșire:

#### GSK Home## 105 100

Tabelul de funcții () indică 105 plimbări care vor merge la GSK și 100 la Acasă.

Putem filtra datele pentru a returna un set de date cu 105 observații și altul cu 100 de observații.

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

Ieșire:

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

Ieșire:

## [1] 105 14 

Criterii multiple

Putem filtra un set de date cu mai multe criterii. De exemplu, puteți extrage observațiile în care destinația este Acasă și a avut loc într-o miercuri.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)

Ieșire:

## [1] 23 14 

23 de observații au corespuns acestui criteriu.

Conductă

Crearea unui set de date necesită o mulțime de operații, cum ar fi:

  • importând
  • fuzionând
  • selectarea
  • filtrare
  • și așa mai departe

Biblioteca dplyr vine cu un operator practic,%>%, numit pipeline . Funcția de conductă face manipularea curată, rapidă și mai puțin promptă la eroare.

Acest operator este un cod care efectuează pași fără a salva pași intermediari pe hard disk. Dacă reveniți la exemplul nostru de mai sus, puteți selecta variabilele de interes și le puteți filtra. Avem trei pași:

  • Pasul 1: Importați date: importați datele GPS
  • Pasul 2: Selectați datele: selectați GoingTo și DayOfWeek
  • Pasul 3: Filtrarea datelor: reveniți numai acasă și miercuri

Putem folosi metoda dificilă de a face acest lucru:

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

Ieșire:

## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday

Aceasta nu este o modalitate convenabilă de a efectua multe operații, mai ales într-o situație cu mulți pași. Mediul se termină cu o mulțime de obiecte stocate.

Să folosim în schimb operatorul conductei%>%. Trebuie doar să definim cadrul de date utilizat la început și tot procesul va decurge din acesta.

Sintaxa de bază a conductei

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.

Puteți crea prima țeavă urmând pașii enumerați mai sus.

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

Ieșire:

## [1] TRUE 

Suntem gata să creăm un set de date uimitor cu operatorul de conducte.

aranja()

În tutorialul anterior, aflați cum să sortați valorile cu funcția sort (). Biblioteca dplyr are funcția sa de sortare. Funcționează ca un farmec cu conducta. Verbul arrange () poate reordona unul sau mai multe rânduri, fie ascendent (implicit), fie descendent.

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

Putem sorta distanța după destinație.

# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

Ieșire:

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

rezumat

În tabelul de mai jos, rezumați toate operațiunile pe care le-ați învățat în timpul tutorialului.

Verb Obiectiv Cod Explicaţie
întrezări verificați structura unui df
glimpse(df)
Identic cu str ()
Selectați() Selectați / excludeți variabilele
select(df, A, B ,C)
Selectați variabilele A, B și C
select(df, A:C)
Selectați toate variabilele de la A la C
select(df, -C)
Excludeți C
filtru() Filtrează df pe baza uneia sau mai multor condiții
filter(df, condition1)
O condiție
filter(df, condition1
ondition2)
aranja() Sortați setul de date cu una sau mai multe variabile
arrange(A)
Un fel crescător de variabilă A
arrange(A, B)
Sortare variabilă A și B
arrange(desc(A), B)
Sortare descendentă a variabilei A și sortare ascendentă a variației B
%>% Creați o conductă între fiecare pas
step 1 %>% step 2 %>% step 3