R Select(), Filter(), Arrange(), Pipeline koos näitega
⚡ Nutikas kokkuvõte
R-is on kolm dplyr-verbi (select), filtreerimine ja arrange'i (filter), mis taandavad andmeraami vajalikele veergudele, ridadele ja järjekorrale. See samm aheldab need toruoperaatoriga 205-realisel reisiaegade andmestikul.

Mis on dplyr R-is?
dplyr on tidyverse'i andmetöötluspakett. See asendab baasi nurksulgudes tähistust R väikese hulga tegusõnadega, millest igaüks on nimetatud sooritatava toimingu järgi ja igaüks võtab oma esimese argumendina andmeraami. See järjepidev kuju võimaldab tegusõnu omavahel aheldada.
| Verb | Toimib järgmiselt: | Mida see teeb |
|---|---|---|
| vali() | Veerud | Säilitab või eemaldab muutujad |
| filter() | Read | Hoiab read tingimusele vastavana |
| korraldama() | Read | Järjestab read ümber ühe või mitme veeru võrra |
| mute () | Veerud | Loob või muudab muutujat |
| kokkuvõte() | Terve laud | Kokkuvõtab paljud read üheks statistikaks |
| grupi_järgi() | Terve laud | Jagab andmed nii, et hilisemad verbid jooksevad rühmade kaupa |
See õpetus hõlmab kolme esimest tegusõna ja toru. koondfunktsiooni õpetus käsitleb põhjalikult group_by() ja summarize() funktsioone.
Selles õpetuses kasutatud andmestik
Dplyr-nimeline teek sisaldab väärtuslikke tegusõnu andmestikus navigeerimiseks. Selle õpetuse käigus kasutate sõiduaegade andmestikku. Andmestik salvestab juhi tehtud reise kodu ja töökoha vahel. Andmestikus 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
Andmestik sisaldab 205 vaatlust ja sõidud toimusid alates Monday reedeni.
Kõigepealt peate:
- laadige andmestik
- kontrollige andmete struktuuri.
Üks mugav dplyr funktsioon on glimpse(). See täidab sama rolli kui baas-R str(), aga prindib iga muutuja kohta ühe rea koos tüübi ja esimeste väärtustega, mida on suure andmestiku puhul palju lihtsam skannida.
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...
Muutuja „Kommentaarid” vajab selgelt lähemat uurimist: esimesed vaatlused on kõik tühjad.
sum(df$Comments =="")
Code Selgitus
- sum(df$Comments == “”): Loendab df-i kommentaaride veerus oleva tühja stringiga võrdsete vaatluste arvu
Väljund:
## [1] 181
Kui andmed on laaditud, alustage verbiga, mis kärbib veerge.
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.
select() abifunktsioonid R-is
Iga veeru nimetamine muutub ebapraktiliseks, kui andmestikus on kümneid muutujaid. dplyr on varustatud abifunktsioonidega, mis valivad veerud mustri või tüübi järgi.
| Abimees | Valib veerud, mis | Näide |
|---|---|---|
| algab_koos() | Alusta nööriga | vali(df, algab_koos(“Keskmine”)) |
| lõpeb_koos() | Lõpeta nööriga | vali(df, lõpeb_koos(“Aeg”)) |
| sisaldab() | Sisaldavad stringi kõikjal | vali(df, sisaldab(“Kiirus”)) |
| tikud() | Regulaaravaldise vaste | vali(df, vasted(“^Max|^Keskmine”)) |
| kus() | Vastama tüübikatset | vali(df, kus(is.numbriline)) |
| kõik() | Pole veel nimesid pandud | vali(df, KoguAeg, kõik()) |
# Keep only the timing columns df %>% select(ends_with("Time")) # Keep every numeric column df %>% select(where(is.numeric)) # Move TotalTime to the front, keep the rest in place df %>% select(TotalTime, everything())
Kaks verbi sobivad loomulikult kokku funktsiooniga select(). Kasutage funktsiooni rename(new_name = old_name), et veergu ümber nimetada ilma seda kustutamata.ping teised ja relocate() veergude teisaldamiseks ilma neid kõiki loetlemata.
filter()
filter() säilitab vaatlused, mis vastavad tingimusele. Filter() toimib täpselt nagu select(), esmalt edastatakse andmeframe ja seejärel komaga eraldatud tingimus:
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)
Code Selgitus
- table(): Loendab vaatluste arvu taseme kohta. Ootab teguri- või tunnusmuutujat.
- table(step_1_df$GoingTo): Loendab reiside arvu iga sihtkoha suunas
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 where GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Väljund:
## [1] 100 14
# Select observations where GoingTo == GSK (work) select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Väljund:
## [1] 105 14
Mitmed kriteeriumid
Andmestikku saab filtreerida mitme kriteeriumi alusel. Näiteks saate näitekstract vaatlused, kus sihtkohaks on kodu ja reis 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.
Üldised filtri() tingimused ja Operatorsid R-is
filter() säilitab kõik read, mille tingimus annab tulemuseks TRUE. Read, mille väärtus on NA, eemaldatakse, mis on käitumine, mis üllatab enamikku algajaid.
| Operator | Tähendus | Näide |
|---|---|---|
| == | Võrdne | filter(df, GoingTo == “Avaleht”) |
| != | Ei ole võrdne | filter(df, nädalapäev != “Monday") |
| & | JA mõlemad peavad kehtima | filter(df, kaugus > 50 ja maksimaalne kiirus > 130) |
| | | VÕI, kumbki võib kehtida | filter(df, NädalaPäev == “Monday„| NädalaPäev == „Reede”) |
| %% ulatuses | Sobib mis tahes väärtusega vektoris | filter(df, Nädalapäev %in% c(“)Monday", "Reede")) |
| vahel () | Jääb numbrilisse vahemikku | filter(df, between(Vahemaa, 48, 52)) |
| is.na() | Kas väärtus on puudu | filter(df, is.na(Kütuseökonoomia)) |
Kolm harjumust ennetavad enamikku filter() vigu.
- Kasutage aheldatud OR asemel %in% filter(df, Nädalapäev %in% c(“)Monday”, „reede“)) on lühem ja palju raskem valesti kirjutada kui kaks vertikaalse kriipsuga ühendatud == võrdlust.
- Ära kunagi testi puuduvat väärtust == abil. Avaldis x == NA tagastab väärtuse NA, mitte TRUE, seega rida kustutatakse märkamatult. Selle asemel kasutage is.na(x).
- Komad tähendavad JA-operaatorit. filter(df, a, b) on identne funktsiooniga filter(df, a & b), mistõttu selle õpetuse varasem näide töötab mõlemal viisil.
Toru Operatoor kahes kihis
Andmestiku loomine nõuab palju toiminguid, näiteks:
- importivate
- ühinevad
- valides
- filtreerimine
- ja nii edasi
Dplyr teegiga on kaasas praktiline operaator %>%, mida nimetatakse toruSee muudab andmetega manipuleerimise puhtamaks, kiiremaks ja veavabamaks.
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 pole mugav viis paljude toimingute aheldamiseks. Iga vahetulemus jääb keskkonda ja nimed kaotavad kiiresti tähenduse.
Kasutage hoopis toruoperaatorit %>%. Andmeraamile antakse alguses üks nimi ja iga samm 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 a trailing `%>%`, because nothing follows it - Note: assigning the result to a new object is optional. Without it, the output prints 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
Need kaks objekti on identsed, seega andis toru ühes loetavas lauses täpselt sama tulemuse.
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
dplyr Tegusõnad R-is: kiirjuhend
Allolev tabel loetleb kõik selles õpetuses kasutatud verbid koos süntaksi ja iga kutse tagastatava väärtusega:
| Verb | Eesmärk | Code | Selgitus |
|---|---|---|---|
| pilguheit | kontrollige df-i struktuuri |
glimpse(df)
|
Sama eesmärk mis str(), lihtsam lugeda |
| 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() | Hoidke read vastavuses ühe või mitme tingimusega |
filter(df, condition1)
|
Üks tingimus |
filter(df, condition1 & condition2)
|
Kaks tingimust koos JA-ga | ||
| 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 |
