V tej vadnici boste izvedeli
- izberite ()
- Filter ()
- Cevovod
- poskrbi ()
Knjižnica z imenom dplyr vsebuje dragocene glagole za krmarjenje po naboru podatkov. V tej vadnici boste uporabili nabor podatkov Travel times. Podatkovni niz zbira informacije o voznikovem potovanju med svojim domom in svojim delovnim mestom. V naboru podatkov je štirinajst spremenljivk, vključno z:
- DayOfWeek: določite dan v tednu, ko voznik uporablja svoj avto
- Razdalja: skupna razdalja poti
- MaxSpeed: največja hitrost potovanja
- TotalTime: dolžina potovanja v minutah
V naboru podatkov je približno 200 opazovanj, vožnja pa se je zgodila med ponedeljkom in petkom.
Najprej morate:
- naloži nabor podatkov
- preverite strukturo podatkov.
Priročna funkcija dplyrja je funkcija glimpse (). To je izboljšanje v primerjavi s str (). Z orodjem glimpse () lahko vidimo strukturo nabora podatkov in se odločimo, katera manipulacija je potrebna.
library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)
Izhod:
## Observations: 205## Variables: 14## $ X1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,… ## $ Date 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20… ## $ StartTime 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3… ## $ DayOfWeek Friday, Friday, Wednesday, Wednesday, Tuesday,… ## $ GoingTo Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS… ## $ Distance 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37… ## $ MaxSpeed 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2… ## $ AvgSpeed 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,… ## $ AvgMovingSpeed 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,… ## $ FuelEconomy , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89… ## $ TotalTime 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,… ## $ MovingTime 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,… ## $ Take407All No, No, No, No, No, No, No, No, No, No, No, No… ## $ Comments , , , , , , , , , , , , , , , Put snow tires o…
Očitno je, da spremenljivka Komentarji potrebuje nadaljnjo diagnostiko. V prvih opažanjih spremenljivke Comments manjkajo le vrednosti.
sum(df$Comments =)
Razlaga kode
- vsota (df $ Komentarji == ""): Vsota opažanj je enaka "" v komentarju stolpca iz df
Izhod:
## [1] 181
izberite ()
Začeli bomo z glagolom select (). Ne potrebujemo nujno vseh spremenljivk, dobra praksa pa je, da izberemo samo tiste spremenljivke, ki se vam zdijo pomembne.
Manjka 181 opazovanj, skoraj 90 odstotkov nabora podatkov. Če se jih odločite izključiti, analize ne boste mogli nadaljevati.
Druga možnost je, da s pomočjo glagola select () spustite spremenljivko Comment.
Spremenljivke lahko izberemo na različne načine s select (). Upoštevajte, da je prvi argument nabor podatkov.
- `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.
S tretjim načinom lahko izključite spremenljivko Komentarji.
step_1_df <- select(df, -Comments)dim(df)
Izhod:
## [1] 205 14
dim(step_1_df)
Izhod:
## [1] 205 13
Prvotni nabor podatkov ima 14 funkcij, korak_1_df pa 13.
Filter ()
Glagol filter () pomaga, da opažanja sledijo merilom. Filter () deluje natanko tako kot select (), najprej prenesete podatkovni okvir in nato pogoj, ločen z vejico:
filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data
Eno merilo
Najprej lahko preštejete število opazovanj znotraj vsake stopnje faktorjske spremenljivke.
table(step_1_df$GoingTo)
Razlaga kode
- tabela (): preštejte število opazovanj po ravni. Upoštevajte, da so sprejemljive samo spremenljivke na ravni faktorja
- tabela (korak_1_df $ GoingTo): preštejte število potovanj proti končnemu cilju.
Izhod:
#### GSK Home## 105 100
Tabela funkcij () kaže, da gre 105 voženj do GSK in 100 do doma.
Podatke lahko filtriramo, da vrnemo en nabor podatkov s 105 opazovanji in drugega s 100 opazovanji.
# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)
Izhod:
## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)
Izhod:
## [1] 105 14
Več meril
Nabor podatkov lahko filtriramo z več kot enim merilom. Na primer, opažanja lahko izvlečete tam, kjer je cilj Dom in so se zgodila v sredo.
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)
Izhod:
## [1] 23 14
23 meritev se je ujemalo s tem merilom.
Cevovod
Ustvarjanje nabora podatkov zahteva veliko operacij, kot so:
- uvoz
- združevanje
- izbiranje
- filtriranje
- in tako naprej
Knjižnica dplyr ima praktični operater%>%, imenovan cevovod . Zaradi funkcije cevovoda je manipulacija čista, hitra in manj hitra do napak.
Ta operater je koda, ki izvaja korake, ne da bi vmesne korake shranila na trdi disk. Če se vrnete k našemu primeru od zgoraj, lahko izberete spremenljivke, ki nas zanimajo, in jih filtrirate. Imamo tri korake:
- 1. korak: Uvoz podatkov: uvozite podatke GPS
- 2. korak: Izberite podatke: izberite GoingTo in DayOfWeek
- 3. korak: Filtriranje podatkov: Vrnite se samo domov in sredo
To lahko uporabimo na težji način:
# Step 1step_1 <- read.csv(PATH)# Step 2step_2 <- select(step_1, GoingTo, DayOfWeek)# Step 3step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")head(step_3)
Izhod:
## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday
To ni primeren način za izvajanje številnih operacij, zlasti v razmerah z veliko koraki. Okolje ima na koncu veliko shranjenih predmetov.
Namesto tega uporabimo operator cevovoda%>%. Določiti moramo le podatkovni okvir, ki se uporablja na začetku, in ves postopek bo potekal iz njega.
Osnovna sintaksa cevovoda
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 the pipe operator `%`, you don't have instructions to pipe anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.
Prvo cev lahko ustvarite po zgoraj naštetih korakih.
# Create the data frame filter_home_wed.It will be the object return at the end of the pipelinefilter_home_wed <-#Step 1read.csv(PATH) % > %#Step 2select(GoingTo, DayOfWeek) % > %#Step 3filter(GoingTo == "Home",DayOfWeek == "Wednesday")identical(step_3, filter_home_wed)
Izhod:
## [1] TRUE
Z operaterjem cevovoda smo pripravljeni ustvariti osupljiv nabor podatkov.
poskrbi ()
V prejšnji vadnici se naučite razvrščati vrednosti s funkcijo sort (). Knjižnica dplyr ima funkcijo razvrščanja. Pri cevovodu deluje kot čar. Glagol aranžma () lahko prerazporedi eno ali več vrstic, naraščajoče (privzeto) ali padajoče.
- `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
Razdalja lahko razvrstimo po cilju.
# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)headIzhod:
## 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 NoPovzetek
V spodnji tabeli povzemate vse postopke, ki ste se jih naučili med vadnico.
Glagol Cilj Koda Pojasnilo pogled preverite strukturo df glimpse(df)Enako str () izberite () Izberite / izključite spremenljivke select(df, A, B ,C)Izberite spremenljivke A, B in C select(df, A:C)Izberite vse spremenljivke od A do C select(df, -C)Izključi C filter () Df filtrirajte glede na enega ali več pogojev filter(df, condition1)En pogoj filter(df, condition1ondition2) poskrbi () Razvrsti nabor podatkov z eno ali več spremenljivkami arrange(A)Naraščajoča vrsta spremenljivke A arrange(A, B)Naraščajoča vrsta spremenljivke A in B arrange(desc(A), B)Padajoča vrsta spremenljivke A in naraščajoča vrsta B %>% Med vsakim korakom ustvarite cevovod step 1 %>% step 2 %>% step 3