R Select(), Filter(), Arrange(), Cjevovod s primjerom

โšก Pametni saลพetak

Odaberi, filtriraj i rasporedi u R-u su tri dplyr glagola koja reduciraju podatkovni okvir na stupce, retke i redoslijed koji vam je potreban. Ovaj vodiฤ ih povezuje s operatorom cijevi na skupu podataka o vremenima putovanja od 205 redaka.

  • ๐Ÿ“‹ Odabir stupca: select(df, A, B) zadrลพava imenovane stupce, select(df, A:C) zadrลพava raspon, a select(df, -C) izostavlja jedan.
  • ๐Ÿ”Ž Filtriranje redaka: filter(df, uvjet) ฤuva odgovarajuฤ‡e retke, a uvjeti se kombiniraju s ampersandom za I ili okomitom crtom za ILI.
  • ๐Ÿ”ฃ Sortiranje: arrange() prema zadanim postavkama sortira retke uzlazno, a desc() obrฤ‡e bilo koji pojedinaฤni stupac.
  • ๐Ÿ”— Cijev Operator: Operator %>% svaki rezultat prosljeฤ‘uje izravno u sljedeฤ‡i glagol, tako da nikakvi meฤ‘uobjekti ne zatrpavaju okruลพenje.
  • ๐Ÿงน Pomoฤ‡ne funkcije: starts_with(), contains() i where() odabiru stupce prema uzorku ili tipu umjesto prema imenu.
  • ๐Ÿ“ Redoslijed glagola je vaลพan: Filtrirajte rano kako biste smanjili podatke, zatim odaberite, pa rasporedite, ลกto svaki kasniji korak ฤini jeftinijim.

R Odaberi filtar Rasporedi cjevovod

ล to je dplyr u R-u?

dplyr je paket za manipulaciju podacima tidyversea. Zamjenjuje notaciju baze u obliku zagrada R s malim skupom glagola, od kojih je svaki nazvan po radnji koju izvodi i svaki uzima podatkovni okvir kao svoj prvi argument. Taj dosljedan oblik omoguฤ‡uje lanฤano povezivanje glagola.

Glagol Djeluje na Ono ลกto se takoฤ‘er
Odaberi() Kolumne Zadrลพava ili briลกe varijable
filtar() Redovi Odrลพava retke koji odgovaraju uvjetu
organizirati () Redovi Preuredi retke za jedan ili viลกe stupaca
mutirati() Kolumne Stvara ili mijenja varijablu
rezimirati() Cijeli stol Saลพima viลกe redaka u jednu statistiku
grupiraj_po() Cijeli stol Dijeli podatke tako da se kasniji glagoli izvrลกavaju po grupi

Ovaj vodiฤ pokriva prva tri glagola plus okomitu crtu. tutorijal o agregatnim funkcijama Detaljno pokriva group_by() i summarize().

Skup podataka koriลกten u ovom vodiฤu

Biblioteka pod nazivom dplyr sadrลพi vrijedne glagole za navigaciju unutar skupa podataka. U ovom vodiฤu koristit ฤ‡ete skup podataka o vremenima putovanja. Skup podataka biljeลพi putovanja koja vozaฤ obavi izmeฤ‘u doma i radnog mjesta. U skupu podataka postoji ฤetrnaest varijabli, ukljuฤujuฤ‡i:

  • DayOfWeek: Identificirajte dan u tjednu kada vozaฤ koristi svoj automobil
  • Udaljenost: Ukupna udaljenost putovanja
  • MaxSpeed: Maksimalna brzina putovanja
  • Ukupno vrijeme: Duljina putovanja u minutama

Skup podataka sadrลพi 205 opaลพanja, a voลพnje su se odvijale od Monday do petka.

Prije svega, trebate:

  • uฤitati skup podataka
  • provjeriti strukturu podataka.

Jedna praktiฤna dplyr funkcija je glimpse(). Igra istu ulogu kao i str() u osnovnom R-u, ali ispisuje jedan redak po varijabli s tipom i prvih nekoliko vrijednosti, ลกto je puno lakลกe skenirati na ลกirokom skupu podataka.

library(dplyr) 
PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"
df <- read.csv(PATH)
glimpse(df)

Izlaz:

## 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...	

Varijabla Komentari oฤito treba bliลพe pogledati: prva opaลพanja su sva prazna.

sum(df$Comments =="")

Code Objaลกnjenje

  • sum(df$Comments == โ€œโ€): Broji opaลพanja jednaka praznom nizu u stupcu Komentari od df

Izlaz:

## [1] 181

Nakon uฤitavanja podataka, poฤnite s glagolom koji skraฤ‡uje stupce.

Odaberi()

Poฤet ฤ‡emo s glagolom select(). Ne trebaju nam nuลพno sve varijable, a dobra je praksa odabrati samo one varijable koje smatrate relevantnima.

Nedostaje nam 181 promatranje, gotovo 90 posto skupa podataka. Ako ih odluฤite iskljuฤiti, neฤ‡ete moฤ‡i nastaviti analizu.

Druga moguฤ‡nost je ispuลกtanje varijable Comment s glagolom select().

Varijable moลพemo odabrati na razliฤite naฤine pomoฤ‡u select(). Imajte na umu da je prvi argument skup podataka.

- `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.	

Moลพete koristiti treฤ‡i naฤin da iskljuฤite varijablu Comments.

step_1_df <- select(df, -Comments)
dim(df)

Izlaz:

## [1] 205  14
dim(step_1_df)

Izlaz:

## [1] 205  13

Izvorni skup podataka ima 14 znaฤajki dok step_1_df ima 13.

Pomoฤ‡ne funkcije select() u R-u

Imenovanje svakog stupca postaje nepraktiฤno kada skup podataka ima desetke varijabli. dplyr dolazi s pomoฤ‡nicima koji umjesto toga odabiru stupce prema uzorku ili prema vrsti.

Pomagaฤ Odabire stupce koji Primjer
poฤinje_s() Zapoฤnite s nizom odaberi(df, poฤinje_s(โ€œProsjekโ€))
zavrลกava_s() Zavrลกite nizom odaberi(df, zavrลกava_s("Vrijeme"))
sadrลพi () Sadrลพi niz znakova bilo gdje odaberi(df, sadrลพi("Brzina"))
odgovara() Pronaฤ‘i regularni izraz odaberi(df, podudaranja(โ€œ^Maks.|^Prosj.โ€))
gdje() Zadovoljiti tipski test odaberi(df, gdje(je.broj))
sve() Joลก nisu imenovani odaberi(df, UkupnoVrijeme, sve())
# 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())

Joลก dva glagola se prirodno sparuju s funkcijom select(). Koristite rename(new_name = old_name) za promjenu naziva stupca bez brisanja.ping ostale i relocate() za premjeลกtanje stupaca bez njihovog navoฤ‘enja svih.

filtar()

Glagol filter() zadrลพava opaลพanja koja zadovoljavaju uvjet. filter() radi potpuno isto kao select(), prvo se prosljeฤ‘uje okvir podataka, a zatim uvjet odvojen zarezom:

filter(df, condition)
arguments:
- df: dataset used to filter the data
- condition:  Condition used to filter the data	

Jedan kriterij

Prije svega, moลพete prebrojati broj opaลพanja unutar svake razine faktorske varijable.

table(step_1_df$GoingTo)

Code Objaลกnjenje

  • table(): Broji broj opaลพanja po razini. Oฤekuje faktor ili karakternu varijablu
  • table(step_1_df$GoingTo): Prebroji broj putovanja prema svakom odrediลกtu

Izlaz:

## 
##  GSK Home 
##  105  100	

Funkcijska tablica() pokazuje da 105 voลพnji ide do GSK-a, a 100 do kuฤ‡e.

Moลพemo filtrirati podatke kako bismo vratili jedan skup podataka sa 105 opaลพanja i drugi sa 100 opaลพanja.

# Select observations where GoingTo == Home
select_home <- filter(df, GoingTo == "Home")
dim(select_home)

Izlaz:

## [1] 100  14
# Select observations where GoingTo == GSK (work)
select_work <- filter(df, GoingTo == "GSK")
dim(select_work)

Izlaz:

## [1] 105  14

Viลกe kriterija

Skup podataka moลพemo filtrirati s viลกe kriterija. Na primjer, moลพetetracopaลพanja gdje je odrediลกte Dom, a putovanje se dogodilo u srijedu.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")
dim(select_home_wed)

Izlaz:

## [1] 23 14

23 opaลพanja odgovaraju ovom kriteriju.

Uobiฤajeni uvjeti filtera() i Operatorovi u R

filter() zadrลพava svaki redak za koji se uvjet isplati kao TRUE. Redci koji se ispostave kao NA se odbacuju, ลกto je ponaลกanje koje iznenaฤ‘uje veฤ‡inu poฤetnika.

Operahumka Znaฤenje Primjer
== Jednak filter(df, GoingTo == โ€œPoฤetnaโ€)
!= Nije jednako filter(df, DanUTjednu != โ€œMonday")
& I, oboje mora vrijediti filter(df, Udaljenost > 50 i Maks. Brzina > 130)
| ILI, bilo koji od njih moลพe vrijediti filter(df, DanUTjednu == โ€œMondayโ€ | DanUTjednu == โ€œPetakโ€)
%u% Odgovara bilo kojoj vrijednosti u vektoru filter(df, DanUTjednu %u% c("Monday", "Petak"))
izmeฤ‘u() Spada unutar numeriฤkog raspona filter(df, izmeฤ‘u(Udaljenost, 48, 52))
je.na() Nedostaje vrijednost filter(df, is.na(PotroลกnjaGoriva))

Tri navike sprjeฤavaju veฤ‡inu filter() greลกaka.

  • Koristite %in% umjesto lanฤanog ILI. filter(df, DanUTjednu %u% c("Monday", "Petak")) je kraฤ‡e i puno ga je teลพe pogreลกno napisati nego dvije usporedbe == spojene okomitom crtom.
  • Nikada ne provjeravajte nedostajuฤ‡u vrijednost pomoฤ‡u ==. Izraz x == NA vraฤ‡a NA, a ne TRUE, pa se redak tiho odbacuje. Umjesto toga koristite is.na(x).
  • Zarezi znaฤe I. filter(df, a, b) je identiฤan filter(df, a & b), zbog ฤega primjer ranije u ovom tutorijalu radi u oba sluฤaja.

Cijev Operator u dplyru

Stvaranje skupa podataka zahtijeva mnogo operacija, kao ลกto su:

  • uvoza
  • stapanje
  • Odabirom
  • filtriranje
  • i tako dalje

Knjiลพnica dplyr dolazi s praktiฤnim operatorom, %>%, koji se zove the cijevฤŒini manipulaciju podacima ฤiลกฤ‡om, brลพom i manje sklonom pogreลกkama.

Ovaj operator je kod koji izvodi korake bez spremanja meฤ‘ukoraka na tvrdi disk. Ako se vratite na naลก primjer odozgo, moลพete odabrati varijable od interesa i filtrirati ih. Imamo tri koraka:

  • Korak 1: Uvezite podatke: Uvezite GPS podatke
  • Korak 2: Odaberite podatke: Odaberite GoingTo i DayOfWeek
  • Korak 3: Filtrirajte podatke: Povratak samo kuฤ‡i i srijedom

Moลพemo koristiti teลพi naฤin da to uฤinimo:

# 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)

Izlaz:

##   GoingTo DayOfWeek
## 1    Home Wednesday
## 2    Home Wednesday
## 3    Home Wednesday
## 4    Home Wednesday
## 5    Home Wednesday
## 6    Home Wednesday	

To nije prikladan naฤin lanฤanog povezivanja mnogih operacija. Svaki meฤ‘urezultat ostaje u okruลพenju, a imena brzo prestaju znaฤiti bilo ลกto.

Umjesto toga koristite operator cijevi %>%. Okvir podataka imenujete jednom na poฤetku i svaki korak teฤe od njega.

Osnovna sintaksa cjevovoda

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.

Svoju prvu cijev moลพete izraditi slijedeฤ‡i gore navedene korake.

# 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)

Izlaz:

## [1] TRUE

Dva objekta su identiฤna, pa je cijev proizvela potpuno isti rezultat u jednoj ฤitljivoj izjavi.

organizirati ()

u prethodni vodiฤnauฤit ฤ‡ete kako sortirati vrijednosti pomoฤ‡u funkcije sort(). Knjiลพnica dplyr ima svoju funkciju sortiranja. To radi kao ลกarm s cjevovodom. Glagol arrange() moลพe promijeniti redoslijed jednog ili viลกe redaka, bilo uzlazno (zadano) ili silazeฤ‡i.

- `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

Udaljenost moลพemo sortirati prema odrediลกtu.

# Sort by destination and distance
step_2_df <- step_1_df %>%
    arrange(GoingTo, Distance)
head(step_2_df)

Izlaz:

##     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 Glagoli u R-u: Kratki vodiฤ

U donjoj tablici navedeni su svi glagoli koriลกteni u ovom vodiฤu, sa sintaksom i onim ลกto svaki poziv vraฤ‡a:

Glagol Cilj Code Objaลกnjenje
svjetlucanje provjerite strukturu df-a
glimpse(df)
Ista svrha kao str(), lakลกe za ฤitanje
Odaberi() Odaberite/iskljuฤite varijable
select(df, A, B ,C)
Odaberite varijable A, B i C
select(df, A:C)
Odaberite sve varijable od A do C
select(df, -C)
Iskljuฤi C
filtar() Neka retci odgovaraju jednom ili viลกe uvjeta
filter(df, condition1)
Jedan uvjet
filter(df, condition1 & condition2)
Dva uvjeta kombinirana s I
organizirati () Razvrstajte skup podataka s jednom ili viลกe varijabli
arrange(A)
Uzlazno sortiranje varijable A
arrange(A, B)
Uzlazno sortiranje varijabli A i B
arrange(desc(A), B)
Silazno sortiranje varijable A i rastuฤ‡e sortiranje B
%>% Napravite cjevovod izmeฤ‘u svakog koraka
step 1 %>% step 2 %>% step 3

Pitanja i odgovori

Cjevovod magrittr %>% dolazi s dplyrom i podrลพava sintaksu rezerviranog mjesta s toฤkom. Izvorni |> cijevni sustav stigao je u R 4.1 i ne treba mu paket. Oba prosljeฤ‘uju lijevi rezultat u prvi argument s desne strane.

Ne. Svaki dplyr glagol vraฤ‡a novi okvir podataka i ostavlja ulaz netaknutim. Rezultat morate dodijeliti objektu ili ga proslijediti dalje da bi promjena ostala vaลพeฤ‡a.

Usporedba s NA vraฤ‡a NA umjesto TRUE, a filter() zadrลพava samo retke koji su TRUE. Koristite is.na() za namjeran odabir nedostajuฤ‡ih vrijednosti ili drop_na() iz tidyra za njihovo uklanjanje.

Inลพenjering znaฤajki za AI modele uglavnom se sastoji od filtriranja redaka, odabira stupaca i sortiranja. dplyr izraลพava te korake kao ฤitljive cjevovode koje recenzenti mogu revidirati, ลกto je vaลพno kada skup podataka za obuku mora biti reproducibilan.

Da. AI asistenti mogu prevesti podskup zagrada u pozive select() i filter() te objasniti cijev. Uvijek pokrenite obje verzije i usporedite dimenzije, jer osnovni R i dplyr razliฤito tretiraju nedostajuฤ‡e vrijednosti.

Saลพmite ovu objavu uz: