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.

  • ???? Veeru valik: select(df, A, B) säilitab nimetatud veerud, select(df, A:C) säilitab vahemiku ja select(df, -C) eemaldab ühe.
  • 🔎 Rea filtreerimine: filter(df, condition) hoiab sobivaid ridu ja tingimused kombineeritakse ja-märgiga (JA) või vertikaalse kriipsuga (VÕI) operaatori jaoks.
  • 🔣 Sorteerimine: arrange() järjestab read vaikimisi kasvavalt ja desc() järjestab iga üksiku veeru vastupidiseks.
  • 🔗 Toru Operator: Operaator %>% annab iga tulemuse otse järgmisse verbi, seega ei sega ükski vaheobjekt keskkonda.
  • 🧹 Abifunktsioonid: Funktsioonid starts_with(), contains() ja where() valivad veerud mustri või tüübi, mitte nime järgi.
  • 📐 Verbi järjekord on oluline: Filtreeri varakult, et andmeid kahandada, seejärel vali ja seejärel korralda, mis hoiab iga järgneva sammu odavamana.

R Valige filter Paiguta torujuhe

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

KKK

Magrittr %>% toru sisaldab dplyr ja toetab punktiga kohatäite süntaksit. Natiivne |> toru saabus R 4.1-s ja ei vaja paketti. Mõlemad edastavad vasakpoolse tulemuse paremal asuvasse esimesse argumenti.

Ei. Iga dplyr-verb tagastab uue andmeraami ja jätab sisendi puutumata. Muudatuse jäämiseks peate tulemuse objektile määrama või edasi edastama.

Võrdlus funktsiooniga NA tagastab väärtuse NA, mitte TRUE, ja filter() säilitab ainult read, mis on TRUE. Puuduvate väärtuste tahtlikuks valimiseks kasutage funktsiooni is.na() või nende eemaldamiseks funktsiooni drop_na() funktsiooni tidyr-ist.

Tehisintellekti mudelite funktsioonide kavandamine hõlmab peamiselt ridade filtreerimist, veergude valimist ja sortimist. dplyr väljendab neid samme loetavate torujuhtmetena, mida arvustajad saavad auditeerida, mis on oluline, kui treeningandmestik peab olema reprodutseeritav.

Jah. Tehisintellekti assistendid saavad nurksulgudes alamhulgad tõlkida select() ja filter() päringuteks ning selgitada toru. Käivitage alati mõlemad versioonid ja võrrelge mõõtmeid, sest baas-R ja dplyr käsitlevad puuduvaid väärtusi erinevalt.

Võta see postitus kokku järgmiselt: