В процесі роботи з даними в R, часто виникає потреба у зміні їхньої структури. Дані можуть надходити у різних форматах, що ускладнює їхній аналіз та візуалізацію. Функції melt()
та cast()
є потужними інструментами, що дозволяють трансформувати дані з одного формату в інший, забезпечуючи гнучкість в аналізі. У цій статті ми розглянемо їхній синтаксис, параметри та способи застосування.
Функція melt(): перетворення в довгий формат
Функція melt()
призначена для перетворення даних з широкого формату у довгий. У широкому форматі кожна змінна представлена окремим стовпцем, тоді як спостереження розташовуються у рядках. У довгому форматі кожне спостереження та його відповідне значення розміщуються в окремому рядку, а додаткові стовпці ідентифікують змінну та її значення.
Синтаксис функції melt()
Синтаксис функції melt()
виглядає наступним чином:
melt(data, id.vars, measure.vars, variable.name, value.name, ...)
Де:
- data: датафрейм, який потрібно трансформувати.
- id.vars: вектор назв стовпців, які ідентифікують спостереження. Ці стовпці залишаться незмінними при перетворенні у довгий формат.
- measure.vars: вектор назв стовпців, що містять дані, які будуть перетворені у довгий формат.
- variable.name: назва стовпця, який буде містити імена змінних у довгому форматі.
- value.name: назва стовпця, який буде містити значення змінних у довгому форматі.
Практичне застосування melt()
Розглянемо приклад. Припустимо, у нас є датафрейм sales
, який містить дані про продажі в широкому форматі:
sales <- data.frame(id = c(1, 2, 3), product = c("A", "B", "C"), sales_2020 = c(100, 200, 300), sales_2021 = c(150, 250, 350))
Щоб перетворити цей датафрейм у довгий формат, ми використаємо функцію melt()
:
sales_long <- melt(sales, id.vars = c("id", "product"), measure.vars = c("sales_2020", "sales_2021"), variable.name = "year", value.name = "sales")
Результат матиме такий вигляд:
id | product | year | sales |
1 | A | 2020 | 100 |
2 | B | 2020 | 200 |
3 | C | 2020 | 300 |
1 | A | 2021 | 150 |
2 | B | 2021 | 250 |
3 | C | 2021 | 350 |
Функція cast(): перетворення в широкий формат
Функція cast()
виконує зворотну операцію до melt()
, перетворюючи дані з довгого формату у широкий. Вона групує дані за змінною, заданою параметром key
, і обчислює агреговані значення, задані параметром value
, для кожної змінної.
Синтаксис функції cast()
Синтаксис функції cast()
виглядає наступним чином:
cast(data, formula, value, drop = FALSE, ...)
Де:
- data: датафрейм, який потрібно трансформувати.
- formula: формула, що визначає змінну для групування та змінну для агрегації. Формула має формат
key ~ value
, деkey
– це змінна для групування, аvalue
– змінна для агрегації. - value: вектор функцій агрегації, що застосовуються до значень
value
. - drop: логічний параметр, що вказує, чи потрібно видалити змінну
key
з результатуючого датафрейму.
Практичне застосування cast()
Продовжимо приклад. Щоб перетворити sales_long
назад у широкий формат, ми використаємо функцію cast()
:
sales <- cast(sales_long, product ~ year, value = "sales")
Результат матиме такий вигляд:
product | 2020 | 2021 |
A | 100 | 150 |
B | 200 | 250 |
C | 300 | 350 |
Підсумок
Функції melt()
та cast()
є незамінними інструментами для маніпулювання даними в R. Вони дозволяють легко перетворювати дані між широким і довгим форматами, що є корисним для різних типів аналізу та візуалізації. Завдяки розумінню синтаксису та параметрів цих функцій, ви зможете ефективно використовувати їх для підготовки даних.
Часті питання
- Які переваги використання функцій
melt()
таcast()
?Ці функції забезпечують гнучкість у зміні форми даних під потреби аналізу. Довгий формат є зручним для агрегування даних, а широкий – для візуалізації.
- Що означає параметр
id.vars
у функціїmelt()
?Параметр
id.vars
визначає стовпці, що ідентифікують спостереження і залишаються незмінними при трансформації. - Які функції агрегації можна застосовувати в параметрі
value
функціїcast()
?Параметр
value
може приймати різні функції агрегації, такі якsum()
,mean()
,median()
,max()
,min()
. - Чи можна використовувати
melt()
таcast()
послідовно?Так, ці функції можна використовувати в комбінації для перетворення даних між різними форматами.
- Як видалити змінну
key
після використанняcast()
?Щоб видалити змінну
key
, потрібно встановити аргументdrop
функціїcast()
наTRUE
. - Які є альтернативні функції для зміни форми даних?
Альтернативами є
pivot_longer()
таpivot_wider()
з пакетуtidyr
, а такожreshape2::melt()
з пакетуreshape2
. - Як використовувати
melt()
таcast()
для очищення даних?melt()
допомагає виявляти пропущені значення, аcast()
– дублікати. - Як оптимізувати використання
melt()
таcast()
для великих наборів даних?Для покращення продуктивності використовуйте
data.table
замість стандартних датафреймів R. - Де можна знайти додаткову інформацію про
melt()
таcast()
?* Документація функції
melt()
* Документація функціїcast()
* Курс DataCamp з перетворення даних у R - Як використовувати
melt()
таcast()
для динамічних звітів?Використовуйте комбінацію
melt()
,cast()
та функційtidyverse
для створення звітів у різних форматах.