R Select(), Filter(), Arrange(), Pipeline koos näitega

Teek nimega dplyr sisaldab andmestikus navigeerimiseks väärtuslikke tegusõnu. Selle õpetuse kaudu kasutate reisiaegade andmestikku. Andmekogum kogub teavet juhi kodu ja töökoha vahelise reisi kohta. Andmekogus on neliteist muutujat, sealhulgas:

  • DayOfWeek: määrake nädalapäev, millal juht oma autot kasutab
  • Kaugus: teekonna kogupikkus
  • MaxSpeed: teekonna maksimaalne kiirus
  • TotalTime: reisi pikkus minutites

Andmekogus on umbes 200 vaatlust ja sõidud toimusid vahemikus Monday reedeni.

Kõigepealt peate:

  • laadige andmestik
  • kontrollige andmete struktuuri.

Üks dplyr-i käepärane funktsioon on glimpse() funktsioon. See on täiustus võrreldes str(). Saame kasutada glimpse() andmestiku struktuuri vaatamiseks ja otsustada, millist manipuleerimist on vaja.

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

Väljund:

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

On ilmne, et muutuja Kommentaarid vajab täiendavat diagnostikat. Muutuja Kommentaarid esimestel tähelepanekutel puuduvad ainult väärtused.

sum(df$Comments =="")

Koodi selgitus

  • sum(df$Comments ==””): summeerige tähelepanekud, mis on võrdne väärtusega "" df-i kommentaaride veerus

Väljund:

## [1] 181

vali()

Alustame verbiga select(). Me ei vaja tingimata kõiki muutujaid ja hea tava on valida ainult need muutujad, mis on teie jaoks asjakohased.

Meil on 181 puuduvat vaatlust, peaaegu 90 protsenti andmekogumist. Kui otsustate need välja jätta, ei saa te analüüsi jätkata.

Teine võimalus on tühistada muutuja Comment koos verbiga select().

Valiku select() abil saame muutujaid valida erineval viisil. Pange tähele, et esimene argument on andmestik.

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

Muutuja Kommentaarid välistamiseks võite kasutada kolmandat viisi.

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

Väljund:

## [1] 205  14
dim(step_1_df)

Väljund:

## [1] 205  13

Algsel andmekogumil on 14 funktsiooni, samas kui step_1_df-l on 13 funktsiooni.

Filter()

Filter() tegusõna aitab hoida vaatlusi kriteeriumi järgi. Filter() töötab täpselt nagu select(), kõigepealt edastad andmeraami ja seejärel komaga eraldatud tingimuse:

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

Üks kriteerium

Esiteks saate kokku lugeda vaatluste arvu faktorimuutuja igal tasemel.

table(step_1_df$GoingTo)

Koodi selgitus

  • table(): Loendage vaatluste arv tasemete kaupa. Pange tähele, et aktsepteeritakse ainult teguritaseme muutujaid
  • table(step_1_df$GoingTo): loendage lõppsihtkohta suunduvate reiside arv.

Väljund:

## 
##  GSK Home 
##  105  100	

Funktsioonitabel() näitab, et 105 sõitu läheb GSK-sse ja 100 kodukohta.

Saame andmeid filtreerida, et tagastada üks andmestik 105 vaatlusega ja teine ​​100 vaatlusega.

# Select observations
if GoingTo == Home
select_home <- filter(df, GoingTo == "Home")
dim(select_home)

Väljund:

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

Väljund:

## [1] 105  14

Mitu kriteeriumi

Saame andmestiku filtreerida rohkem kui ühe kriteeriumiga. Näiteks saate välja võtta vaatlused, kus sihtkoht on Kodu ja mis toimus kolmapäeval.

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

Väljund:

## [1] 23 14

Sellele kriteeriumile vastas 23 vaatlust.

Torujuhe

Andmestiku loomine nõuab palju toiminguid, näiteks:

  • importivate
  • ühinevad
  • valides
  • filtreerimine
  • ja nii edasi

Dplyr teegiga on kaasas praktiline operaator %>%, mida nimetatakse torujuhe. Konveieri funktsioon muudab manipuleerimise puhtaks, kiireks ja vähem kiireks vigadeks.

See operaator on kood, mis sooritab samme ilma vahepealseid samme kõvakettale salvestamata. Kui pöördute tagasi meie ülaltoodud näite juurde, saate valida huvipakkuvad muutujad ja neid filtreerida. Meil on kolm sammu:

  • 1. samm: andmete importimine: importige GPS-andmed
  • 2. samm: valige andmed: valige GoingTo ja DayOfWeek
  • 3. toiming: filtreerige andmed: tagastage ainult koju ja kolmapäeval

Saame selleks kasutada rasket viisi:

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

Väljund:

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

See ei ole mugav viis paljude toimingute tegemiseks, eriti olukorras, kus on palju samme. Keskkond lõpeb sellega, et talletatakse palju esemeid.

Kasutame selle asemel torujuhtme operaatorit %>%. Peame määratlema ainult alguses kasutatava andmeraami ja kogu protsess lähtub sellest.

Konveieri põhisüntaks

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.

Saate luua oma esimese toru, järgides ülaltoodud samme.

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

Väljund:

## [1] TRUE

Oleme valmis koos torujuhtme operaatoriga looma vapustava andmestiku.

korraldama()

aasta eelmine juhendaja, õpid väärtusi sorteerima funktsiooniga sort(). Teegil dplyr on oma sortimisfunktsioon. See töötab torujuhtmega nagu võlu. Arrange() tegusõnaga saab ümber järjestada ühe või mitu rida, kas kasvavalt (vaikimisi) või kahanevalt.

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

Saame sorteerida vahemaad sihtkoha järgi.

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

Väljund:

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

kokkuvõte

Allolevas tabelis võtate kokku kõik õpetuse käigus õpitud toimingud.

Verb Eesmärk kood Selgitus
pilguheit kontrollige df-i struktuuri
glimpse(df)
Identne str()
vali() Valige/välistage muutujad
select(df, A, B ,C)
Valige muutujad A, B ja C
select(df, A:C)
Valige kõik muutujad A-st C-ni
select(df, -C)
Välista C
filter() Filtreerige df ühe või mitme tingimuse alusel
filter(df, condition1)
Üks tingimus
filter(df, condition1
tingimus2)
korraldama() Sorteerige andmestik ühe või mitme muutujaga
arrange(A)
Kasvav muutuja A
arrange(A, B)
Muutujate A ja B kasvav sort
arrange(desc(A), B)
Muutuja A kahanev ja B tõusev sort
%>% Looge iga sammu vahele torujuhe
step 1 %>% step 2 %>% step 3