Учебное пособие по Dplyr: объединение и объединение данных в R с примерами

Введение в анализ данных

Анализ данных можно разделить на три части:

  • Добыча: Во-первых, нам нужно собрать данные из многих источников и объединить их.
  • регулируемых рынков психоделиков: Этот шаг включает в себя манипулирование данными. Как только мы объединим все источники данных, мы сможем приступить к очистке данных.
  • Визуализируйте: Последний шаг — визуализировать наши данные, чтобы проверить их неравномерность.
Процесс анализа данных
Процесс анализа данных

Одной из наиболее серьезных проблем, с которыми сталкиваются ученые, занимающиеся данными, является манипулирование данными. Данные никогда не доступны в желаемом формате. Ученые, работающие с данными, должны тратить как минимум половину своего времени на очистку данных и манипулирование ими. Это одно из самых ответственных заданий в работе. Если процесс манипулирования данными не является полным, точным и строгим, модель не будет работать правильно.

Р Дплыр

В R есть библиотека dplyr, которая помогает в преобразовании данных. Библиотека dplyr по своей сути создана на базе четырех функций для манипулирования данными и пяти команд для очистки данных. После этого мы можем использовать библиотеку ggplot для анализа и визуализации данных.

Мы научимся использовать библиотеку dplyr для управления Фрейм данных.

Объединить данные с помощью R Dplyr

dplyr предоставляет приятный и удобный способ объединения наборов данных. У нас может быть много источников входных данных, и в какой-то момент нам потребуется их объединить. Соединение с dplyr добавляет переменные справа от исходного набора данных.

Дплир присоединяется

Фоллоwing — это четыре важных типа соединений, используемых в dplyr для объединения двух наборов данных:

Функция Цель аргументы Несколько ключей
left_join() Объедините два набора данных. Сохраняйте все наблюдения из исходной таблицы. данные, происхождение, назначение, по = «ID» происхождение, назначение, по = c («ID», «ID2»)
right_join() Объедините два набора данных. Сохраняйте все наблюдения из целевой таблицы. данные, происхождение, назначение, по = «ID» происхождение, назначение, по = c («ID», «ID2»)
внутреннее соединение() Объедините два набора данных. Исключает все несовпадающие строки данные, происхождение, назначение, по = «ID» происхождение, назначение, по = c («ID», «ID2»)
полное_соединение() Объедините два набора данных. Сохраняет все наблюдения данные, происхождение, назначение, по = «ID» происхождение, назначение, по = c («ID», «ID2»)

Мы изучим все типы объединений на простом примере.

Прежде всего, мы создаем два набора данных. Таблица 1 содержит две переменные: ID и y, тогда как таблица 2 содержит идентификаторы и z. В каждой ситуации нам необходимо иметь пара ключей переменная. В нашем случае ID — это наш ключ переменная. Функция будет искать одинаковые значения в обеих таблицах и привязывать возвращаемые значения справа от таблицы 1.

Объединить данные с помощью R Dplyr

library(dplyr)
df_primary <- tribble(
  ~ID, ~y,
   "A", 5,
   "B", 5,
   "C", 8,
   "D", 0,
  "F", 9)
df_secondary <- tribble(
  ~ID, ~z,
   "A", 30,
   "B", 21,
   "C", 22,
   "D", 25,
   "E", 29)

Дплир left_join()

Самый распространенный способ объединить два набора данных — использовать функцию left_join(). На рисунке ниже видно, что пара ключей идеально соответствует строкам A, B, C и D из обоих наборов данных. Однако E и F остались. Как мы относимся к этим двум наблюдениям? С помощью left_join() мы сохраним все переменные в исходной таблице и не будем учитывать переменные, у которых нет пары ключей в целевой таблице. В нашем примере переменная E не существует в таблице 1. Поэтому строка будет удалена. Переменная F берется из исходной таблицы; он будет сохранен после left_join() и вернет NA в столбце z. На рисунке ниже показано, что произойдет с left_join().

Пример dplyr left_join()

Пример dplyr left_join()

left_join(df_primary, df_secondary, by ='ID')

Вывод:

## 
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>		
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA

Дплир right_join()

Функция right_join() работает точно так же, как left_join(). Единственная разница заключается в том, что строка удалена. Значение E, доступное в целевом фрейме данных, существует в новой таблице и принимает значение NA для столбца y.

Пример dplyr right_join()

Пример dplyr right_join()

right_join(df_primary, df_secondary, by = 'ID')

Вывод:

##
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     E    NA    29

Дплир Internal_join()

Когда мы на 100% уверены, что два набора данных не совпадают, мы можем рассмотреть возможность возврата только строки, существующие в изоферменты печени набор данных. Это возможно, когда нам нужен чистый набор данных или когда мы не хотим приписывать пропущенные значения среднему или медиане.

Internal_join() приходит на помощь. Эта функция исключает несовпадающие строки.

Пример dplyr Internal_join()

Пример dplyr Internal_join()

inner_join(df_primary, df_secondary, by ='ID')

Вывод:

## 
# A tibble: 4 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25

Дплир full_join()

Наконец, функция full_join() сохраняет все наблюдения и заменяет пропущенные значения на NA.

Пример dplyr full_join()

Пример dplyr full_join()

full_join(df_primary, df_secondary, by = 'ID')

Вывод:

## # A tibble: 6 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA
## 6     E    NA    29

Несколько пар ключей

И последнее, но не менее важное: в нашем наборе данных может быть несколько ключей. Рассмотрим следующееwing набор данных, в котором есть годы или список продуктов, купленных покупателем.

Несколько пар ключей в R

Если мы попытаемся объединить обе таблицы, R выдаст ошибку. Чтобы исправить ситуацию, мы можем передать две переменные пары ключей. То есть идентификатор и год, которые появляются в обоих наборах данных. Мы можем использовать следующееwing код для объединения таблицы 1 и таблицы 2

df_primary <- tribble(
  ~ID, ~year, ~items,
  "A", 2015,3,
  "A", 2016,7,
  "A", 2017,6,
  "B", 2015,4,
  "B", 2016,8,
  "B", 2017,7,
  "C", 2015,4,
  "C", 2016,6,
  "C", 2017,6)
df_secondary <- tribble(
  ~ID, ~year, ~prices,
  "A", 2015,9,
  "A", 2016,8,
  "A", 2017,12,
  "B", 2015,13,
  "B", 2016,14,
  "B", 2017,6,
  "C", 2015,15,
  "C", 2016,15,
  "C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))

Вывод:

## # A tibble: 9 x 4
##      ID  year items prices
##   <chr> <dbl> <dbl>  <dbl>
## 1     A  2015     3      9
## 2     A  2016     7      8
## 3     A  2017     6     12
## 4     B  2015     4     13
## 5     B  2016     8     14
## 6     B  2017     7      6
## 7     C  2015     4     15
## 8     C  2016     6     15
## 9     C  2017     6     13

Функции очистки данных в R

Фоллоwing Вот четыре важные функции для очистки (очистки) данных:

Функция Цель аргументы
собирать() Преобразуйте данные из широких в длинные (данные, ключ, значение, na.rm = ЛОЖЬ)
распространение() Преобразование данных из длинных в широкие (данные, ключ, значение)
отдельный() Разделить одну переменную на две (данные, столбец, в, сен = «», удалить = ИСТИНА)
единица() Объединение двух переменных в одну (data, col, conc, sep= «», удалить = TRUE)

Мы используем библиотеку tidyr. Эта библиотека принадлежит к коллекции библиотек для манипулирования, очистки и визуализации данных. Если мы установим R с anaconda, библиотека уже установлена. Библиотеку мы можем найти здесь, https://anaconda.org/r/r-tidyr.

Если он еще не установлен, введите следующееwing команда для установки тидира:

install tidyr : install.packages("tidyr")

собирать()

Целью функции сбора() является преобразование данных из широких в длинные.

Синтаксис

gather(data, key, value, na.rm = FALSE)
Arguments:
-data: The data frame used to reshape the dataset 
-key: Name of the new column created
-value: Select the columns used to fill the key column
-na.rm: Remove missing values. FALSE by default

Пример

Ниже мы можем визуализировать концепцию изменения формы от широкой к длинной. Мы хотим создать один столбец с именем «рост», заполненный строками квартальных переменных.

Пример функции сбора() в R

library(tidyr)
# Create a messy dataset
messy <- data.frame(
  country = c("A", "B", "C"),
  q1_2017 = c(0.03, 0.05, 0.01),
  q2_2017 = c(0.05, 0.07, 0.02),
  q3_2017 = c(0.04, 0.05, 0.01),
  q4_2017 = c(0.03, 0.02, 0.04))
messy

Вывод:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04
# Reshape the data
tidier <-messy %>%
gather(quarter, growth, q1_2017:q4_2017)
tidier

Вывод:

##    country quarter growth
## 1        A q1_2017   0.03
## 2        B q1_2017   0.05
## 3        C q1_2017   0.01
## 4        A q2_2017   0.05
## 5        B q2_2017   0.07
## 6        C q2_2017   0.02
## 7        A q3_2017   0.04
## 8        B q3_2017   0.05
## 9        C q3_2017   0.01
## 10       A q4_2017   0.03
## 11       B q4_2017   0.02
## 12       C q4_2017   0.04

В функции сбора() мы создаем две новые переменные: квартал и рост, поскольку наш исходный набор данных имеет одну групповую переменную: т. е. страну и пары ключ-значение.

распространение()

Функция распространения() делает противоположность функции сбора.

Синтаксис

spread(data, key, value)
arguments: 
data: The data frame used to reshape the dataset
key: Column to reshape long to wide
value: Rows used to fill the new column

Пример

Мы можем вернуть более аккуратный набор данных в беспорядочный вид с помощью методаspread().

# Reshape the data
messy_1 <- tidier %>%
  spread(quarter, growth) 
messy_1

Вывод:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04

отдельный()

Функция «separate()» разбивает столбец на две части в соответствии с разделителем. Эта функция полезна в некоторых ситуациях, когда переменная является датой. Наш анализ может потребовать сосредоточения внимания на месяце и году, и мы хотим разделить столбец на две новые переменные.

Синтаксис

separate(data, col, into, sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: The column to split
-into: The name of the new variables
-sep: Indicates the symbol used that separates the variable, i.e.:  "-", "_", "&"
-remove: Remove the old column. By default sets to TRUE.

Пример

Мы можем отделить квартал от года в более аккуратном наборе данных, применив функциюdependent().

separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)

Вывод:

##   country Qrt year growth
## 1       A  q1 2017   0.03
## 2       B  q1 2017   0.05
## 3       C  q1 2017   0.01
## 4       A  q2 2017   0.05
## 5       B  q2 2017   0.07
## 6       C  q2 2017   0.02

объединить()

Функция unite() объединяет два столбца в один.

Синтаксис

unit(data, col, conc ,sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: Name of the new column
-conc: Name of the columns to concatenate
-sep: Indicates the symbol used that unites the variable, i.e:  "-", "_", "&"
-remove: Remove the old columns. By default, sets to TRUE

Пример

В приведенном выше примере мы отделили квартал от года. Что, если мы захотим их объединить. Мы используем следующееwing код:

unit_tidier <- separate_tidier %>%
  unite(Quarter, Qrt, year, sep ="_")
head(unit_tidier)

Вывод:

##   country Quarter growth
## 1       A q1_2017   0.03
## 2       B q1_2017   0.05
## 3       C q1_2017   0.01
## 4       A q2_2017   0.05
## 5       B q2_2017   0.07
## 6       C q2_2017   0.02

Выводы

  • Анализ данных можно разделить на три части: извлечение, преобразование и визуализация.
  • В R есть библиотека dplyr, которая помогает в преобразовании данных. Библиотека dplyr по своей сути создана на базе четырех функций для манипулирования данными и пяти команд для очистки данных.
  • dplyr предоставляет приятный и удобный способ объединения наборов данных. Соединение с dplyr добавляет переменные справа от исходного набора данных.
  • Прелесть dplyr в том, что он обрабатывает четыре типа соединений, аналогично SQL:
    • left_join() – Объединить два набора данных и сохранить все наблюдения из исходной таблицы.
    • right_join() – Объединить два набора данных и сохранить все наблюдения из целевой таблицы.
    • внутреннее соединение() – Чтобы объединить два набора данных и исключить все несовпадающие строки.
    • полное_соединение() – Объединить два набора данных и сохранить все наблюдения.
  • Используя библиотеку tidyr, вы можете преобразовать набор данных, используя следующую команду:wing функции:
    • собирать(): Преобразование данных из широких в длинные.
    • распространение(): Преобразование данных из длинного в широкое.
    • отдельный(): Разделить одну переменную на две.
    • единица(): объединить две переменные в одну.