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… 

Очевидно, що змінна Коментарі потребує подальшої діагностики. Перші спостереження змінної Коментарі лише відсутні значення.

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.

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

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 (): Підрахуйте кількість спостережень за рівнем. Зверніть увагу, приймаються лише змінні рівня фактора
  • таблиця (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)
Виберіть усі змінні від А до С
select(df, -C)
Виключити С
filter () Відфільтруйте df на основі однієї чи багатьох умов
filter(df, condition1)
Одна умова
filter(df, condition1
умова2)
організувати () Відсортуйте набір даних за однією або кількома змінними
arrange(A)
Зростаюча змінна A
arrange(A, B)
Висхідні сорти змінних A і B
arrange(desc(A), B)
Низхідний сорт змінної A і зростаючий сорт B
%>% Створіть конвеєр між кожним кроком
step 1 %>% step 2 %>% step 3