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.

  • 📋 Oszlop kiválasztása: A select(df, A, B) megőrzi az elnevezett oszlopokat, a select(df, A:C) egy tartományt, a select(df, -C) pedig egyet elveti.
  • ???? Sorszűrés: A filter(df, condition) megőrzi az egyező sorokat, és a feltételeket az és jellel kombinálja ÉS esetén, vagy a függőleges sávval VAGY esetén.
  • 🔣 Válogatás: Az arrange() függvény alapértelmezés szerint növekvő sorrendben rendezi a sorokat, míg a desc() függvény bármely oszlop sorrendjét megfordítja.
  • 🔗 Cső Operator: A %>% operátor minden eredményt közvetlenül a következő igébe ad át, így semmilyen köztes objektum nem zsúfolódik a környezetben.
  • 🧹 Segédfüggvények: A starts_with(), contains() és where() függvények név helyett minta vagy típus alapján választják ki az oszlopokat.
  • 📐 Az ige sorrendje fontos: Szűrj korán az adatok zsugorításához, majd jelöld ki, végül rendezd el, ami minden későbbi lépést olcsóbbá tesz.

R Szűrő kiválasztása Csővezeték elrendezése

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

GYIK

A magrittr %>% pipe tartalmazza a dplyr utasítást, és támogatja a ponttal ellátott helyőrző szintaxist. A natív |> pipe az R 4.1-es verziójában jelent meg, és nem igényel csomagot. Mindkettő átadja a bal oldali eredményt a jobb oldali első argumentumnak.

Nem. Minden dplyr függvény egy új adatkeretet ad vissza, és a bemenetet érintetlenül hagyja. Az eredményt egy objektumhoz kell rendelni, vagy tovább kell küldeni, hogy a változás megmaradjon.

Az NA értékkel való összehasonlítás NA értéket ad vissza TRUE helyett, és a filter() csak az IGAZ értékű sorokat tartja meg. A hiányzó értékek szándékos kiválasztásához használd az is.na() függvényt, vagy a tidyr függvényből a drop_na() függvényt az eltávolításukhoz.

Az AI-modellek funkciótervezése többnyire sorok szűrését, oszlopok kiválasztását és rendezést foglal magában. A dplyr ezeket a lépéseket olvasható folyamatokként fejezi ki, amelyeket a felülvizsgálók auditálhatnak, ami akkor fontos, ha egy betanítási adatkészletnek reprodukálhatónak kell lennie.

Igen. Az AI asszisztensek le tudják fordítani a zárójeles részhalmazokat select() és filter() hívásokra, és el tudják magyarázni a pipe-ot. Mindig futtasd mindkét verziót, és hasonlítsd össze a dimenziókat, mert az alap R és a dplyr eltérően kezeli a hiányzó értékeket.

Foglald össze ezt a bejegyzést a következőképpen: