R Изберете (), филтрирайте (), подредете (), тръбопровод с пример

Съдържание:

Anonim

В този урок ще научите

  • изберете ()
  • Филтър ()
  • Тръбопровод
  • подреждам ()

Библиотеката, наречена dplyr, съдържа ценни глаголи за навигация в набора от данни. Чрез този урок ще използвате набора от данни за пътни пътувания. Наборът от данни събира информация за пътуванията от шофьора между дома и работното му място. В набора от данни има четиринадесет променливи, включително:

  • DayOfWeek: Определете деня от седмицата, в който водачът използва колата си
  • Разстояние: Общото разстояние на пътуването
  • MaxSpeed: Максималната скорост на пътуването
  • TotalTime: Продължителността в минути на пътуването

Наборът от данни съдържа около 200 наблюдения в набора от данни, а пътуванията се случват между понеделник и петък.

На първо място, трябва да:

  • заредете набора от данни
  • проверете структурата на данните.

Една удобна функция с dplyr е функцията glimpse (). Това е подобрение спрямо str (). Можем да използваме glimpse (), за да видим структурата на набора от данни и да решим каква манипулация е необходима.

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

Изход:

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

Това е очевидно, че променливата Comments се нуждае от допълнителна диагностика. Първите наблюдения на променливата Comments са само липсващи стойности.

sum(df$Comments =)

Обяснение на кода

  • сума (df $ Коментари == ""): Сумирайте наблюденията, равни на "" в коментарите на колоната от df

Изход:

## [1] 181 

изберете ()

Ще започнем с глагола select (). Не е задължително да се нуждаем от всички променливи и добра практика е да избираме само променливите, които намирате за подходящи.

Имаме 181 липсващи наблюдения, почти 90 процента от набора от данни. Ако решите да ги изключите, няма да можете да продължите анализа.

Другата възможност е да изпуснете променливата Comment с глагола select ().

Можем да избираме променливи по различни начини с select (). Имайте предвид, че първият аргумент е наборът от данни.

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

Можете да използвате третия начин за изключване на променливата Comments.

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

Изход:

## [1] 205 14
dim(step_1_df)

Изход:

## [1] 205 13 

Оригиналният набор от данни има 14 функции, докато step_1_df има 13.

Филтър ()

Глаголът filter () помага да се запазят наблюденията, следвайки критерии. Филтърът () работи точно като select (), първо подавате рамката с данни и след това условие, разделено със запетая:

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

Един критерий

На първо място, можете да преброите броя на наблюденията във всяко ниво на факторна променлива.

table(step_1_df$GoingTo)

Обяснение на кода

  • table (): Пребройте броя на наблюденията по ниво. Имайте предвид, че се приемат само променливи на ниво фактор
  • таблица (стъпка_1_df $ GoingTo): Пребройте броя на пътуванията към крайната дестинация.

Изход:

#### GSK Home## 105 100

Функционалната таблица () показва 105 пътувания за GSK и 100 за дома.

Можем да филтрираме данните, за да върнем един набор от данни със 105 наблюдения и друг със 100 наблюдения.

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

Изход:

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

Изход:

## [1] 105 14 

Множество критерии

Можем да филтрираме набор от данни с повече от един критерий. Например, можете да извлечете наблюденията, където дестинацията е Начало и се е случвало в сряда.

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

Изход:

## [1] 23 14 

23 наблюдения отговарят на този критерий.

Тръбопровод

Създаването на набор от данни изисква много операции, като например:

  • внос
  • сливане
  • избиране
  • филтриране
  • и така нататък

Библиотеката dplyr се предлага с практичен оператор,%>%, наречен конвейер . Функцията на тръбопровода прави манипулацията чиста, бърза и по-малко бърза за грешка.

Този оператор е код, който изпълнява стъпки, без да запазва междинни стъпки на твърдия диск. Ако се върнете към нашия пример отгоре, можете да изберете интересуващите променливи и да ги филтрирате. Имаме три стъпки:

  • Стъпка 1: Импортиране на данни: Импортиране на gps данни
  • Стъпка 2: Избор на данни: Изберете GoingTo и DayOfWeek
  • Стъпка 3: Филтриране на данни: Връщане само вкъщи и сряда

Можем да използваме трудния начин да го направим:

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

Изход:

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

Това не е удобен начин за извършване на много операции, особено в ситуация с много стъпки. Околната среда завършва с много съхранявани обекти.

Нека вместо това използваме оператора на тръбопровода%>%. Трябва само да дефинираме използваната в началото рамка с данни и целият процес ще протече от нея.

Основен синтаксис на конвейер

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.

Можете да създадете първата си тръба, като следвате стъпките, изброени по-горе.

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

Изход:

## [1] TRUE 

Готови сме да създадем зашеметяващ набор от данни с оператора на тръбопровода.

подреждам ()

В предишния урок ще научите как да сортирате стойностите с функцията sort (). Библиотеката dplyr има своята функция за сортиране. Работи като чар с тръбопровода. Глаголът подреждане () може да пренареди един или много редове, възходящ (по подразбиране) или низходящ.

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

Можем да сортираме разстоянието по местоназначение.

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

Изход:

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

Обобщение

В таблицата по-долу обобщавате всички операции, които сте научили по време на урока.

Глагол Обективен Код Обяснение
поглед проверете структурата на df
glimpse(df)
Идентично на str ()
изберете () Изберете / изключете променливите
select(df, A, B ,C)
Изберете променливите A, B и C
select(df, A:C)
Изберете всички променливи от A до C
select(df, -C)
Изключете C
филтър () Филтрирайте df въз основа на едно или много условия
filter(df, condition1)
Едно условие
filter(df, condition1
ondition2)
подреждам () Сортирайте набора от данни с една или много променливи
arrange(A)
Възходящ вид променлива A
arrange(A, B)
Възходящ вид променливи A и B
arrange(desc(A), B)
Низходящ вид променлива A и възходящ вид B
%>% Създайте конвейер между всяка стъпка
step 1 %>% step 2 %>% step 3