R Pasirinkite (), Filtras (), Sutvarkykite (), Vamzdynas su pavyzdžiu

Šioje pamokoje sužinosite

  • pasirinkti ()
  • Filtras()
  • Vamzdynas
  • sutvarkyti ()

Bibliotekoje, vadinamoje dplyr, yra vertingų veiksmažodžių, kuriuos reikia naršyti duomenų rinkinyje. Per šią pamoką naudosite kelionės laiko duomenų rinkinį. Duomenų rinkinys renka informaciją apie vairuotojo keliones tarp namų ir darbovietės. Duomenų rinkinyje yra keturiolika kintamųjų, įskaitant:

  • DayOfWeek: Nurodykite savaitės dieną, kurią vairuotojas naudoja savo automobiliu
  • Atstumas: bendras kelionės atstumas
  • „MaxSpeed“: maksimalus kelionės greitis
  • „TotalTime“: kelionės trukmė minutėmis

Duomenų rinkinyje yra apie 200 stebėjimų, o važiavimai vyko nuo pirmadienio iki penktadienio.

Pirmiausia turite:

  • įkelti duomenų rinkinį
  • patikrinti duomenų struktūrą.

Viena patogi funkcija su dplyr yra žvilgsnio () funkcija. Tai yra str () patobulinimas. Galime naudoti žvilgsnį () norėdami pamatyti duomenų rinkinio struktūrą ir nuspręsti, kokių manipuliacijų reikia.

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

Išvestis:

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

Tai akivaizdu, kad kintamąjį „Komentarai“ reikia toliau diagnozuoti. Pirmieji kintamojo komentarų stebėjimai neturi tik reikšmių.

sum(df$Comments =)

Kodo paaiškinimas

  • suma (df $ komentarai == ""): suma, pastebėjimų suma lygi "" stulpelio komentaruose iš df

Išvestis:

## [1] 181 

pasirinkti ()

Pradėsime veiksmažodžiu select (). Mums nebūtinai reikia visų kintamųjų, o gera praktika yra pasirinkti tik tuos kintamuosius, kurie jums atrodo svarbūs.

Mes turime 181 trūkstamą stebėjimą, beveik 90 procentų duomenų rinkinio. Jei nuspręsite juos išskirti, negalėsite tęsti analizės.

Kita galimybė yra mesti kintamąjį Komentaras su veiksmažodžiu select ().

Kintamuosius galime pasirinkti įvairiais būdais naudodami select (). Atkreipkite dėmesį, kad pirmasis argumentas yra duomenų rinkinys.

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

Norėdami pašalinti komentarų kintamąjį, galite naudoti trečiąjį būdą.

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

Išvestis:

## [1] 205 14
dim(step_1_df)

Išvestis:

## [1] 205 13 

Originaliame duomenų rinkinyje yra 14 funkcijų, o step_1_df - 13.

Filtras()

Veiksmažodis filtras () padeda išlaikyti stebėjimus pagal kriterijus. Filtras () veikia lygiai taip pat, kaip select (), pirmiausia perduodate duomenų rėmelį ir tada kableliu atskirtą sąlygą:

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

Vienas kriterijus

Visų pirma, galite suskaičiuoti stebėjimų skaičių kiekviename veiksnio kintamojo lygyje.

table(step_1_df$GoingTo)

Kodo paaiškinimas

  • lentelė (): suskaičiuokite stebėjimų skaičių pagal lygį. Atkreipkite dėmesį, priimami tik faktoriaus lygio kintamieji
  • lentelė (step_1_df $ GoingTo): suskaičiuokite kelionių į galutinį tikslą skaičių.

Išvestis:

#### GSK Home## 105 100

Funkcijų lentelėje () nurodoma, kad 105 važiavimai vyksta į GSK, o 100 - į namus.

Mes galime filtruoti duomenis, kad gautume vieną duomenų rinkinį su 105 stebėjimais ir kitą su 100 stebėjimų.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Išvestis:

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

Išvestis:

## [1] 105 14 

Keli kriterijai

Mes galime filtruoti duomenų rinkinį pagal daugiau nei vieną kriterijų. Pavyzdžiui, galite išskirti stebėjimus, kur kelionės tikslas yra Namai ir įvyko trečiadienį.

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

Išvestis:

## [1] 23 14 

Šį kriterijų atitiko 23 stebėjimai.

Vamzdynas

Norėdami sukurti duomenų rinkinį, reikia atlikti daug operacijų, tokių kaip:

  • importuojantis
  • susiliejimas
  • pasirinkdami
  • filtravimas
  • ir taip toliau

„Dplyr“ bibliotekoje yra praktinis operatorius,%>%, vadinamas dujotiekiu . Dujotiekio funkcija leidžia manipuliuoti švariai, greitai ir rečiau klaidinant.

Šis operatorius yra kodas, kuris atlieka veiksmus neišsaugodamas tarpinių veiksmų kietajame diske. Jei grįžtate prie mūsų pavyzdžio iš viršaus, galite pasirinkti dominančius kintamuosius ir juos filtruoti. Mes turime tris veiksmus:

  • 1 veiksmas: duomenų importavimas: importuokite GPS duomenis
  • 2 žingsnis: Pasirinkite duomenis: pasirinkite „GoingTo“ ir „DayOfWeek“
  • 3 žingsnis: filtruokite duomenis: grįžkite tik namo ir trečiadienį

Mes galime tai padaryti sunkiu būdu:

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

Išvestis:

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

Tai nėra patogus būdas atlikti daug operacijų, ypač situacijoje su daugybe žingsnių. Aplinka baigia saugoti daug objektų.

Vietoj to naudokime dujotiekio operatorių%>%. Turime apibrėžti tik pradžioje naudojamą duomenų rėmą, ir iš jo eis visas procesas.

Pagrindinė dujotiekio sintaksė

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.

Pirmąjį vamzdį galite sukurti atlikdami anksčiau išvardytus veiksmus.

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

Išvestis:

## [1] TRUE 

Esame pasirengę sukurti nuostabų duomenų rinkinį su dujotiekio operatoriumi.

sutvarkyti ()

Ankstesnėje pamokoje sužinosite, kaip rūšiuoti reikšmes naudojant funkciją rūšiuoti (). Biblioteka dplyr turi savo rūšiavimo funkciją. Tai veikia kaip žavesys dujotiekiu. Veiksmažodis „korraldyti“ („)“ gali pertvarkyti vieną ar kelias eilutes, kylančią (numatytoji) arba mažėjanč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 

Mes galime rūšiuoti atstumą pagal paskirties vietą.

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

Išvestis:

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

Santrauka

Žemiau esančioje lentelėje apibendrinate visas operacijas, kurias išmokote per mokymo programą.

Veiksmažodis Tikslas Kodas Paaiškinimas
žvilgsnis patikrinti df struktūrą
glimpse(df)
Tapatus str ()
pasirinkti () Pasirinkite / išskirkite kintamuosius
select(df, A, B ,C)
Pasirinkite kintamuosius A, B ir C
select(df, A:C)
Pasirinkite visus kintamuosius nuo A iki C
select(df, -C)
Neįtraukite C
filtras() Filtruokite df pagal vieną ar kelias sąlygas
filter(df, condition1)
Viena sąlyga
filter(df, condition1
papildymas2)
sutvarkyti () Rūšiuoti duomenų rinkinį su vienu ar keliais kintamaisiais
arrange(A)
Didėjantis kintamojo A rūšis
arrange(A, B)
Didėjanti kintamųjų A ir B rūšis
arrange(desc(A), B)
Mažėjančio kintamojo A rūšis ir B kylančioji rūšis
%>% Sukurkite dujotiekį tarp kiekvieno žingsnio
step 1 %>% step 2 %>% step 3

Įdomios straipsniai...