Як об’єднати дані в R за допомогою R merge, dplyr або data.table
Р це мова програмування та програмне середовище, яке в основному використовується для статистичних обчислень і графіки. Він надає широкий спектр інструментів для обробки даних, аналізу даних, візуалізації даних і статистичного моделювання.
Об’єднання даних є завданням аналізу та обробки даних. У R існують різні способи об’єднання кадрів даних за допомогою 'merge()' функція з бази R, використовуючи «dplyr» пакет, і ‘data.table’ пакет. У цьому підручнику ми використаємо наведені вище три способи об’єднання даних за допомогою R.
1. Використання «merge()» з базового R:
Функція merge() у base R допомагає нам об’єднати два або більше кадрів даних на основі загальних стовпців. Він виконує різні типи з’єднань, наприклад внутрішнє з’єднання, з’єднання зліва, з’єднання справа та повне з’єднання.
Синтаксис:
merged_df <- merge(x,y,by = 'common_column',..)
- «х» і 'та' це кадри даних, які потрібно об’єднати.
- 'від' вказує загальні стовпці, на яких буде виконано злиття.
- Додаткові аргументи, як 'all.x' , всі і 'все' контролювати тип об'єднання, яке має бути виконано.
приклад:
Розглянемо два кадри даних «df1» і «df2»
Р
df1 <-> data.frame> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (25, 30, 35, 40))> df2 <-> data.frame> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (5000, 4000, 6000, 7000))> |
Давайте подивимося приклади виконання різних типів об’єднань за допомогою функції «merge()»:
1. Внутрішнє приєднання (поведінка за замовчуванням):
Р
inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000
Отриманий фрейм даних inner_join включатиме лише загальні рядки where «ID» присутній в як «df1», так і «df2».
2. Ліве приєднання( «all.x=TRUE» ):
Р
left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000
Отриманий кадр даних «left_join» включатиме всі рядки з 'df1' і відповідні рядки з «df2». Невідповідні рядки з «df2» матимуть значення «NA».
3. Приєднатися праворуч ( 'all.y=TRUE' ):
Р
right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000 4 5 NA Lawyer 7000
Отриманий кадр даних «right_join» включатиме всі рядки з «df2» і відповідні рядки з «df1». Невідповідні рядки з «df1» матимуть значення «NA».
4. Повне зовнішнє приєднання ( «все = TRUE» )
Р
full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000 5 5 NA Lawyer 7000
Отриманий кадр даних full_join включатиме усі рядки з «df1» і «df2». Невідповідні значення матимуть значення «NA».
2. Використовуючи пакет dplyr:
Пакет «dplyr» надає набір функцій для маніпулювання даними, включаючи об’єднання кадрів даних.
Основною функцією об’єднання в «dplyr» є 'join()', який підтримує різні типи з'єднань.
Синтаксис:
merged_df <- join(x,y,by='common_column',type='type_of_join')
- «х» і 'та' це кадри даних, які потрібно об’єднати.
- 'від' вказує загальні стовпці, для яких буде виконано злиття
- ‘type_of_join’ може бути «внутрішній», «лівий», «правий» або «повний», щоб визначити тип об’єднання.
приклад:
Встановіть dplyr() упакувати та створити два кадри даних, 'df1' і «df2».
Р
library> (dplyr)> df1 <-> data.frame> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (20, 30, 40, 50))> df2 <-> data.frame> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (2000, 4000, 6000, 7000))> |
Давайте подивимося приклади виконання різних типів об’єднань за допомогою функцій dplyr:
1. Внутрішнє з'єднання:
Р
inner_join <-> inner_join> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000
Отриманий кадр даних «inner_join» включатиме лише загальні рядки, де «ID» присутній як у «df1», так і в «df2».
2. Приєднання зліва:
Р
left_join <-> left_join> (df1, df2, by => 'ID'> )> print> (left_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000
Отриманий кадр даних «left_join» включатиме усі рядки з «df1» і відповідні рядки з «df2» . Невідповідні рядки з «df2» матимуть значення «NA».
3. Праве приєднання:
Р
right_join <-> right_join> (df1, df2, by => 'ID'> )> print> (right_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000
Отриманий кадр даних 'right_join' включатиме усі рядки з «df2» і відповідні рядки з «df1». Невідповідні рядки «df1» матимуть значення «NA».
4. Повне зовнішнє приєднання:
Р
full_join <-> full_join> (df1, df2, by => 'ID'> )> print> (full_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000
Отриманий кадр даних full_join включатиме усі рядки з «df1» і «df2» . Невідповідні рядки матимуть значення «NA».
3. Використання пакета data.table:
Пакет «data.table» пропонує ефективний і швидкий підхід до маніпулювання даними. Він забезпечує функцію «merge()». Він схожий на базовий R, але оптимізований для швидкості.
Синтаксис:
merged_dt <- merge(x, y, by = 'common_column', ...)
- «х» і 'та' це кадри даних, які потрібно об’єднати.
- 'від' вказує загальні стовпці, на яких буде виконано злиття.
- Додаткові аргументи, як 'all.x', 'all.y' і 'все' який керує типом об'єднання.
приклад:
Встановіть бібліотеку data.table і створіть дві таблиці даних «dt1» і «dt2».
Р
library> (data.table)> dt1 <-> data.table> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (25, 30, 35, 40))> dt2 <-> data.table> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (5000, 4000, 6000, 7000))> |
Давайте розглянемо приклади виконання різних типів об’єднань за допомогою функції merge() з пакету data.table:
1. Внутрішнє приєднання (поведінка за замовчуванням):
Р
inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000
Отриманий кадр даних «inner_join» включатиме лише загальні рядки, де «ID» присутній як у «df1», так і в «df2».
2. Ліве з’єднання (‘all.x = TRUE’):
Р
left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000
Отриманий кадр даних «left_join» включатиме все Невідповідність від «df1» і відповідні рядки з «df2». Невідповідні рядки з «df2» матимуть значення «NA».
3. Праве з’єднання (‘all.y = TRUE’):
Р
right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)> |
Вихід:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000
Отриманий кадр даних 'right_join' включатиме все Невідповідність рядки з «df2» і відповідні рядки з «df1». Невідповідні рядки з «df1» матимуть значення «NA».
3. Повне зовнішнє об'єднання ('все = TRUE'):
Р
full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)> |
Вихід:
ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000
Отриманий кадр даних full_join включатиме все Невідповідність рядки з «df1» і «df2». Невідповідні рядки матимуть значення «NA».
Однією з переваг використання «dplyr» і «data.table» є те, що вони забезпечують більш стислий і читабельний синтаксис для маніпулювання даними порівняно з базовим R.
Резюме:
- ‘merge()’ надає функцію загального призначення для об’єднання кадрів даних.
- «dplyr» зосереджується на об’єднанні з акцентом на читабельності та простоті використання.
- «дані. таблиці» забезпечує швидкий і ефективний спосіб обробки великих наборів даних з оптимізованою продуктивністю.
- Вибирати підхід слід виходячи зі складності завдання та вимог до виконання.