R Select(), Filter(), Järjestä(), Pipeline esimerkin kanssa
Dplyr-niminen kirjasto sisältää arvokkaita verbejä tietojoukon sisällä liikkumiseen. Tämän opetusohjelman avulla käytät Matka-ajat-tietojoukkoa. Aineisto kerää tietoa kuljettajan koti- ja työpaikkansa välisistä matkoista. Tietojoukossa on neljätoista muuttujaa, mukaan lukien:
- DayOfWeek: Tunnista viikonpäivä, jolloin kuljettaja käyttää autoaan
- Etäisyys: Matkan kokonaispituus
- MaxSpeed: Matkan suurin nopeus
- TotalTime: Matkan pituus minuutteina
Aineistossa on noin 200 havaintoa, ja matkat tapahtuivat välillä Monday perjantaihin.
Ensinnäkin sinun on:
- lataa tietojoukko
- tarkista datan rakenne.
Yksi kätevä ominaisuus dplyr:ssä on glimpse()-funktio. Tämä on parannus str(). Voimme käyttää glimpse():tä nähdäksemme tietojoukon rakenteen ja päättääksemme, mitä käsittelyä tarvitaan.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
lähtö:
## 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...
Tämä on ilmeistä, että muuttuja Kommentit tarvitsee lisädiagnostiikkaa. Kommentit-muuttujan ensimmäisistä havainnoista puuttuu vain arvoja.
sum(df$Comments =="")
Koodin selitys
- summa(df$Comments ==””): Summaa havainnot, jotka ovat yhtä kuin "" sarakkeen kommenteissa df:stä
lähtö:
## [1] 181
valitse ()
Aloitamme verbillä select(). Emme välttämättä tarvitse kaikkia muuttujia, ja hyvä käytäntö on valita vain ne muuttujat, jotka pidät merkityksellisinä.
Meillä on 181 puuttuvaa havaintoa, lähes 90 prosenttia tietojoukosta. Jos päätät jättää ne pois, et voi jatkaa analyysiä.
Toinen mahdollisuus on pudottaa muuttuja Kommentti verbillä select().
Voimme valita muuttujia eri tavoilla select(). Huomaa, että ensimmäinen argumentti on tietojoukko.
- `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.
Voit käyttää kolmatta tapaa sulkea pois Kommentit-muuttuja.
step_1_df <- select(df, -Comments) dim(df)
lähtö:
## [1] 205 14
dim(step_1_df)
lähtö:
## [1] 205 13
Alkuperäisessä tietojoukossa on 14 ominaisuutta, kun taas step_1_df:ssä on 13.
Suodattaa()
Filter()-verbi auttaa pitämään havainnot kriteerin mukaisesti. Filter() toimii täsmälleen kuten select(), välität ensin datakehyksen ja sitten pilkulla erotetun ehdon:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
Yksi kriteeri
Ensinnäkin voit laskea havaintojen lukumäärän tekijämuuttujan kullakin tasolla.
table(step_1_df$GoingTo)
Koodin selitys
- table(): Laske havaintojen määrä tasoittain. Huomaa, että vain tekijätason muuttujat hyväksytään
- table(step_1_df$GoingTo): Laske määränpäähän kohti tehtyjen matkojen määrä.
lähtö:
## ## GSK Home ## 105 100
Funktiotaulukko() osoittaa, että 105 matkaa menee GSK:lle ja 100 kotiin.
Voimme suodattaa tiedot palauttaaksemme yhden aineiston, jossa on 105 havaintoa, ja toisen, jossa on 100 havaintoa.
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
lähtö:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
lähtö:
## [1] 105 14
Useita kriteerejä
Voimme suodattaa tietojoukon useammalla kuin yhdellä kriteerillä. Voit esimerkiksi poimia havainnot, joissa määränpää on Koti ja tapahtui keskiviikkona.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
lähtö:
## [1] 23 14
23 havaintoa vastasi tätä kriteeriä.
Putki
Tietojoukon luominen vaatii paljon toimintoja, kuten:
- tuovan
- sulautuvan
- valitsemalla
- suodatus
- jne.
Dplyr-kirjastossa on käytännöllinen operaattori, %>%, nimeltään the putki. Liukuhihnaominaisuus tekee manipuloinnista puhdasta, nopeaa ja vähemmän nopeaa virheille.
Tämä operaattori on koodi, joka suorittaa vaiheita tallentamatta välivaiheita kiintolevylle. Jos palaat yllä olevaan esimerkkiimme, voit valita kiinnostavat muuttujat ja suodattaa ne. Meillä on kolme vaihetta:
- Vaihe 1: Tuo tiedot: Tuo GPS-tiedot
- Vaihe 2: Valitse tiedot: Valitse GoingTo ja DayOfWeek
- Vaihe 3: Suodata tiedot: Palauta vain kotiin ja keskiviikkoon
Voimme käyttää vaikeampaa tapaa tehdä se:
# 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)
lähtö:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Se ei ole kätevä tapa suorittaa monia toimintoja, varsinkaan tilanteessa, jossa on paljon vaiheita. Ympäristö päätyy siihen, että säilytetään paljon esineitä.
Käytetään sen sijaan putkioperaattoria %> %. Meidän tarvitsee vain määrittää alussa käytetty tietokehys ja kaikki prosessi virtaa siitä.
Liukuhihnan perussyntaksi
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.
Voit luoda ensimmäisen putken noudattamalla yllä lueteltuja vaiheita.
# 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)
lähtö:
## [1] TRUE
Olemme valmiita luomaan hämmästyttävän tietojoukon putkioperaattorin kanssa.
järjestää()
In edellinen opetusohjelma, opit lajittelemaan arvot funktiolla sort(). Kirjastossa dplyr on lajittelutoimintonsa. Se toimii kuin hurmaa putkilinjan kanssa. Arrange()-verbi voi järjestää uudelleen yhden tai useamman rivin joko nousevasti (oletus) tai laskevaksi.
- `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
Voimme lajitella etäisyyden määränpään mukaan.
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
lähtö:
## 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
Yhteenveto
Alla olevassa taulukossa on yhteenveto kaikista opetusohjelman aikana oppimistasi toimenpiteistä.
Verbi | Tavoite | Koodi | Selitys |
---|---|---|---|
vilaus | tarkista df:n rakenne |
glimpse(df) |
Sama kuin str() |
valitse () | Valitse/sulje pois muuttujat |
select(df, A, B ,C) |
Valitse muuttujat A, B ja C |
select(df, A:C) |
Valitse kaikki muuttujat A:sta C:hen | ||
select(df, -C) |
Sulje pois C | ||
suodattaa() | Suodata df yhden tai useamman ehdon perusteella |
filter(df, condition1) |
Yksi ehto |
filter(df, condition1 |
ehto2) | ||
järjestää() | Lajittele tietojoukko yhdellä tai useammalla muuttujalla |
arrange(A) |
Nouseva muuttuja A |
arrange(A, B) |
Nouseva muuttuja A ja B | ||
arrange(desc(A), B) |
Laskeva muuttuja A ja nouseva laji B | ||
%>% | Luo putki jokaisen vaiheen väliin |
step 1 %>% step 2 %>% step 3 |