Функції R melt() і cast() – зміна форми даних у R

В процесі роботи з даними в 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. Вони дозволяють легко перетворювати дані між широким і довгим форматами, що є корисним для різних типів аналізу та візуалізації. Завдяки розумінню синтаксису та параметрів цих функцій, ви зможете ефективно використовувати їх для підготовки даних.

Часті питання

  1. Які переваги використання функцій melt() та cast()?

    Ці функції забезпечують гнучкість у зміні форми даних під потреби аналізу. Довгий формат є зручним для агрегування даних, а широкий – для візуалізації.

  2. Що означає параметр id.vars у функції melt()?

    Параметр id.vars визначає стовпці, що ідентифікують спостереження і залишаються незмінними при трансформації.

  3. Які функції агрегації можна застосовувати в параметрі value функції cast()?

    Параметр value може приймати різні функції агрегації, такі як sum(), mean(), median(), max(), min().

  4. Чи можна використовувати melt() та cast() послідовно?

    Так, ці функції можна використовувати в комбінації для перетворення даних між різними форматами.

  5. Як видалити змінну key після використання cast()?

    Щоб видалити змінну key, потрібно встановити аргумент drop функції cast() на TRUE.

  6. Які є альтернативні функції для зміни форми даних?

    Альтернативами є pivot_longer() та pivot_wider() з пакету tidyr, а також reshape2::melt() з пакету reshape2.

  7. Як використовувати melt() та cast() для очищення даних?

    melt() допомагає виявляти пропущені значення, а cast() – дублікати.

  8. Як оптимізувати використання melt() та cast() для великих наборів даних?

    Для покращення продуктивності використовуйте data.table замість стандартних датафреймів R.

  9. Де можна знайти додаткову інформацію про melt() та cast()?

    * Документація функції melt()
    * Документація функції cast()
    * Курс DataCamp з перетворення даних у R

  10. Як використовувати melt() та cast() для динамічних звітів?

    Використовуйте комбінацію melt(), cast() та функцій tidyverse для створення звітів у різних форматах.