R Select(), Filter(), Arrange(), Pipeline példával
⚡ Okos összefoglaló
Az R-ben a Select, Filter és Arrange a három dplyr művelet, amelyek egy adatkeretet a szükséges oszlopokra, sorokra és sorrendre redukálnak. Ez a bemutató egy 205 soros utazási időket tartalmazó adatkészlet pipe operátorával láncolja össze őket.

Mi a dplyr R-ben?
dplyr a tidyverse adatmanipulációs csomagja. Ez helyettesíti a bázis zárójeles jelölését. R egy kis igehalmazzal, amelyek mindegyike a végrehajtott műveletről kapta a nevét, és mindegyik az adatkeretet veszi első argumentumként. Ez a konzisztens alak teszi lehetővé az igék láncba fűzését.
| Ige | Cselekszik | Mit csinál |
|---|---|---|
| select() | Oszlopok | Megtartja vagy elveti a változókat |
| szűrő() | Sorok | Megőrzi a feltételnek megfelelő sorokat |
| rendezni() | Sorok | Sorok átrendezése egy vagy több oszlop szerint |
| mute() | Oszlopok | Létrehoz vagy módosít egy változót |
| összefoglal() | Teljes asztal | Sok sort egyetlen statisztikába sűrít össze |
| csoportosítás() | Teljes asztal | Felosztja az adatokat, hogy a későbbi műveletek csoportonként fussanak |
Ez az oktatóanyag az első három igét, valamint a sípot tárgyalja. összesítő függvény oktatóanyag részletesen tárgyalja a group_by() és a summarize() függvényeket.
Az oktatóanyagban használt adatkészlet
A dplyr nevű könyvtár értékes műveleteket tartalmaz az adathalmazon belüli navigáláshoz. Ebben az oktatóanyagban az Utazási idők adathalmazt fogod használni. Az adathalmaz rögzíti a sofőr otthona és munkahelye között megtett utakat. Az adathalmaz tizennégy változót tartalmaz, beleértve:
- DayOfWeek: Határozza meg a hét azon napját, amikor a vezető használja az autóját
- Távolság: Az utazás teljes távolsága
- MaxSpeed: Az utazás maximális sebessége
- TotalTime: Az utazás hossza percekben
Az adathalmaz 205 megfigyelést tartalmaz, és a túrák ettől a dátumtól kezdve zajlottak. Monday péntekig.
Először is a következőket kell tennie:
- töltse be az adatkészletet
- ellenőrizze az adatok szerkezetét.
Egy hasznos dplyr függvény a glimpse(). Ugyanazt a szerepet tölti be, mint az R alap str() függvény, de változónként egy sort nyomtat ki a típussal és az első néhány értékkel, ami sokkal könnyebb átvizsgálni egy nagyméretű adathalmazon.
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
output:
## 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...
A „Comments” változót egyértelműen alaposabban meg kell vizsgálni: az első megfigyelések mind üresek.
sum(df$Comments =="")
Code Magyarázat
- sum(df$Comments == “”): A df függvény Megjegyzések oszlopában található üres karakterlánccal egyenlő megfigyelések megszámlálása
output:
## [1] 181
Miután betöltöd az adatokat, kezdd azzal az igével, amelyik levágja az oszlopokat.
select()
Kezdjük a select() igével. Nem feltétlenül van szükségünk az összes változóra, és a bevált gyakorlat az, hogy csak azokat a változókat jelöljük ki, amelyeket relevánsnak találunk.
181 hiányzó megfigyelésünk van, az adatkészlet majdnem 90 százaléka. Ha úgy dönt, hogy kizárja őket, nem tudja folytatni az elemzést.
A másik lehetőség a Comment változó eldobása a select() igével.
A select() segítségével többféleképpen is kiválaszthatunk változókat. Vegye figyelembe, hogy az első argumentum az adatkészlet.
- `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.
A harmadik módot használhatja a Megjegyzések változó kizárására.
step_1_df <- select(df, -Comments) dim(df)
output:
## [1] 205 14
dim(step_1_df)
output:
## [1] 205 13
Az eredeti adatkészlet 14, míg a step_1_df 13 szolgáltatást tartalmaz.
select() segédfüggvények R-ben
Az egyes oszlopok elnevezése már nem praktikus, ha egy adathalmaz több tucat változót tartalmaz. A dplyr olyan segédprogramokkal érkezik, amelyek minta vagy típus alapján választják ki az oszlopokat.
| Segítő | Kijelöli azokat az oszlopokat, amelyek | Példa |
|---|---|---|
| ezzel kezdődik() | Kezdje egy karakterlánccal | select(df, starts_with(“Átlag”)) |
| végződik_valamint() | Zsinórral zárul | select(df, ends_with(“Idő”)) |
| tartalmazza () | Tartalmazzon karakterláncot bárhol | select(df, tartalmazza(“Sebesség”)) |
| egyezés() | Reguláris kifejezésre illeszkedő | select(df, matches(“^Max|^Átlag”)) |
| ahol() | Típusteszt teljesítése | select(df, where(is.numeric)) |
| minden() | Még nem nevezték el | select(df, TeljesIdő, minden()) |
# 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())
Két további ige természetes párosítást tesz lehetővé a select() függvény segítségével. A rename(new_name = old_name) használatával átnevezhet egy oszlopot anélkül, hogy eldobná azt.ping a többit, és a relocate() függvényt az oszlopok áthelyezéséhez anélkül, hogy az összeset listáznánk.
szűrő()
A filter() függvény megőrzi azokat a megfigyeléseket, amelyek kielégítenek egy feltételt. A filter() pontosan úgy működik, mint a select() függvény, először az adatkeretet adjuk át, majd egy vesszővel elválasztott feltételt:
filter(df, condition)
arguments:
- df: dataset used to filter the data
- condition: Condition used to filter the data
Egy kritérium
Először is megszámolhatja a megfigyelések számát egy faktorváltozó egyes szintjén belül.
table(step_1_df$GoingTo)
Code Magyarázat
- table(): Szintenként megszámolja a megfigyelések számát. Faktor- vagy karakterváltozót vár.
- table(step_1_df$GoingTo): Számolja meg az egyes célállomások felé tett utak számát
output:
## ## GSK Home ## 105 100
A table() függvény azt jelzi, hogy 105 út megy a GSK-ba és 100 a Home-ba.
Az adatokat szűrhetjük úgy, hogy egy 105 megfigyelést tartalmazó adatkészletet adjunk vissza, és egy másikat 100 megfigyeléssel.
# Select observations where GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
output:
## [1] 100 14
# Select observations where GoingTo == GSK (work) select_work <- filter(df, GoingTo == "GSK") dim(select_work)
output:
## [1] 105 14
Több kritérium
Egy adathalmazt több kritérium alapján is szűrhetünk. Például,tract azok a megfigyelések, ahol az úti cél az otthon, és az utazás szerdán történt.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
output:
## [1] 23 14
23 megfigyelés felelt meg ennek a kritériumnak.
Common filter() Feltételek és Operators R-ben
A filter() függvény minden olyan sort megőrz, amelynél a feltétel IGAZ értéket ad ki. Azok a sorok, amelyek NA értéket adnak ki, el lesznek vetve, ami a legtöbb kezdőt meglepi.
| Operator | Jelentés | Példa |
|---|---|---|
| == | Egyenlő | filter(df, GoingTo == “Kezdőlap”) |
| != | Nem egyenlő | filter(df, DayOfWeek != “Monday") |
| & | ÉS, mindkettőnek fenn kell állnia | szűrő(df, Távolság > 50 és Max. Sebesség > 130) |
| | | VAGY, bármelyik tarthatja | filter(df, DayOfWeek == “Monday„| DayOfWeek == „Péntek”) |
| %%-ban | Egy vektor bármely értékével megegyezik | filter(df, DayOfWeek %in% c(“)Monday”, „Péntek”)) |
| között() | Egy numerikus tartományon belül esik | szűrő(df, között(Távolság, 48, 52)) |
| is.na() | Hiányzó érték | filter(df, is.na(Üzemanyag-fogyasztás)) |
Három szokás előzi meg a legtöbb filter() hibát.
- Használj %in% karakterláncot VAGY helyett. filter(df, DayOfWeek %in% c(“)Monday„, „péntek”)) rövidebb és sokkal nehezebb elgépelni, mint két függőleges vonallal összekötött == összehasonlítás.
- Soha ne tesztelj hiányzó értéket == karakterrel. Az x == NA kifejezés NA értéket ad vissza, nem pedig TRUE értéket, így a sor csendben elvész. Helyette használd az is.na(x) függvényt.
- A vesszők ÉS-t jelentenek. A filter(df, a, b) megegyezik a filter(df, a & b) függvényekkel, ezért a tutoriál korábbi példája mindkét irányban működik.
A cső Operator a dplyrben
Egy adatkészlet létrehozása sok műveletet igényel, például:
- importáló
- egyesülő
- kiválasztása
- szűrő
- és így tovább
A dplyr könyvtár egy praktikus operátorral, %>%, az úgynevezett csőTisztábbá, gyorsabbá és hibamentesebbé teszi az adatkezelést.
Ez az operátor olyan kód, amely lépéseket hajt végre anélkül, hogy közbenső lépéseket mentene a merevlemezre. Ha visszatér a fenti példánkhoz, kiválaszthatja az érdeklődésre számot tartó változókat és szűrheti őket. Három lépésünk van:
- 1. lépés: Adatok importálása: Importálja a GPS-adatokat
- 2. lépés: Adatok kiválasztása: Válassza a GoingTo és DayOfWeek lehetőséget
- 3. lépés: Adatok szűrése: Csak hazatérés és szerda
Használhatjuk a legnehezebb módszert is:
# 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)
output:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
Ez nem egy kényelmes módja sok művelet láncba fűzésének. Minden köztes eredmény a környezetben marad, és a nevek gyorsan elveszítik jelentésüket.
Használd helyette a %>% pipe operátort. Az adatkeretet egyszer nevezed el az elején, és minden lépés ebből indul ki.
A folyamat alapvető szintaxisa
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.
Az első csövet a fent felsorolt lépések szerint készítheti el.
# 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)
output:
## [1] TRUE
A két objektum azonos, így a pipe pontosan ugyanazt az eredményt produkálta egyetlen olvasható utasításban.
rendezni()
A előző bemutató, megtanulhatja, hogyan kell rendezni az értékeket a sort() függvénnyel. A dplyr könyvtárnak van rendezési funkciója. Úgy működik, mint egy bűbáj a csővezetékkel. Az arrange() ige egy vagy több sort is átrendezhet, növekvő (alapértelmezett) vagy csökkenő sorrendben.
- `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
A távolságot úti cél szerint rendezhetjük.
# Sort by destination and distance step_2_df <- step_1_df %>% arrange(GoingTo, Distance) head(step_2_df)
output:
## 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 Igék R-ben: Gyorsreferencia
Az alábbi táblázat felsorolja az ebben az oktatóanyagban használt összes igét, a szintaxissal és az egyes hívások visszaadott értékével együtt:
| Ige | Objektív | Code | Magyarázat |
|---|---|---|---|
| megpillant | ellenőrizze a df szerkezetét |
glimpse(df)
|
Ugyanaz a célja, mint az str() függvénynek, könnyebben olvasható |
| select() | Változók kiválasztása/kizárása |
select(df, A, B ,C)
|
Válassza ki az A, B és C változókat |
select(df, A:C)
|
Válassza ki az összes változót A-tól C-ig | ||
select(df, -C)
|
C. kizárása | ||
| szűrő() | Tartsa a sorokat egy vagy több feltételnek megfelelően |
filter(df, condition1)
|
Egy feltétel |
filter(df, condition1 & condition2)
|
Két feltétel kombinálva az ÉS-sel | ||
| rendezni() | Rendezze az adatkészletet egy vagy több változóval |
arrange(A)
|
Növekvő típusú A változó |
arrange(A, B)
|
Növekvő típusú A és B változó | ||
arrange(desc(A), B)
|
Az A változó csökkenő és a B növekvő fajta | ||
| %>% | Hozzon létre egy folyamatot az egyes lépések között |
step 1 %>% step 2 %>% step 3 |
