R Izberite (), Filter (), Razporedite (), Cevovod s primerom

Kazalo:

Anonim

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## $ X  1, 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)head

Izhod:

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

Povzetek

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, condition1
ondition2)
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