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 нуждается в дальнейшей диагностике. Первые наблюдения за переменной Комментарии - это только пропущенные значения.

sum(df$Comments =)

Код Пояснение

  • sum (df $ Comments == ""): суммировать наблюдения, равные "" в комментариях столбца из df

Выход:

## [1] 181 

Выбрать()

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

У нас 181 пропущенное наблюдение, почти 90 процентов набора данных. Если вы решите их исключить, вы не сможете продолжить анализ.

Другая возможность - удалить переменную Комментарий с помощью команды 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.

Вы можете использовать третий способ исключить переменную Комментарии.

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

Выход:

## [1] 205 14
dim(step_1_df)

Выход:

## [1] 205 13 

Исходный набор данных содержит 14 функций, а step_1_df - 13.

Фильтр()

Глагол filter () помогает сохранить наблюдения в соответствии с критериями. 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 (): подсчитать количество наблюдений по уровням. Обратите внимание, принимаются только переменные факторного уровня.
  • table (step_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