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 |