Pivot в R

Материал из Поле цифровой дидактики
Описание Pivot в R (из пакета tidyr) — это "поворот" или "сводка данных", простыми словами — инструмент для перестройки формы таблицы: из длинной (long) в широкую (wide) и наоборот. Представьте, что данные — это пластилин: pivot_longer "растягивает" таблицу вниз, превращая столбцы в строки, а pivot_wider "расплющивает" её в стороны, делая из строк новые столбцы. Это нужно, чтобы привести данные к tidy-стандарту для удобного анализа, графиков и моделей — в образовании часто данные приходят "криво" (оценки по предметам в столбцах или в строках), а pivot их быстро приводит в порядок.
Область знаний Информатика, Большие данные
Область использования (ISTE)
Возрастная категория 15


Поясняющее видео
Близкие рецепту понятия Датасет
Среды и средства для приготовления рецепта: R
library(tidyverse)

## Как сделать pivot_wider для tidy данных

data_messy <- tribble(
  ~id, ~measurement, ~value,
  "A", "bp1", 100,
  "B", "bp1", 140,
  "B", "bp2", 115,
  "A", "bp2", 120,
  "A", "bp3", 105
)

tidy_wide <- data_messy %>%
  pivot_wider(names_from = measurement, values_from = value)

## Как сделать pivot_longer из wide в tidy

wide_data <- tribble(
  ~id, ~bp1, ~bp2,
  "A", 100, 120,
  "B", 140, 115
)

tidy_long <- wide_data %>%
  pivot_longer(cols = starts_with("bp"),
               names_to = "measurement",
               values_to = "value")

tidy_long 

###############

# Длинная форма: много строк на ученика (типично из дневников/логов)
data_long <- tribble(
  ~ученик, ~предмет, ~оценка,
  "Анна",  "Математика", 4,
  "Анна",  "Русский",    5,
  "Борис", "Математика", 3,
  "Борис", "Русский",    4,
  "Вера",  "Математика", 5,
  "Вера",  "Русский",    NA_real_
)

# pivot_wider: поворот в широкую таблицу (сводка успеваемости)
wide_table <- data_long %>%
  pivot_wider(names_from = предмет, values_from = оценка)

wide_table  


long_table <- wide_table %>%
  pivot_longer(cols = c("Математика", "Русский"),
               names_to = "предмет",
               values_to = "оценка")

long_table


Функция Что делает С чем работает Простой пример (R)
select() Выбирает (оставляет) нужные столбцы датафрейма; остальные отбрасывает. Столбцы (переменные)
students |> 
  select(username, n_total_edits, discipline)
filter() Оставляет строки, которые удовлетворяют логическому условию (фильтрация наблюдений). Строки (наблюдения)
students |> 
  filter(n_total_edits > 50, discipline == "Филология")
mutate() Добавляет новые столбцы или изменяет существующие, вычисляя их из других переменных. Столбцы (новые или изменённые переменные)
students |>
  mutate(
    edit_per_day = n_total_edits / days_active,
    pct_articles = edits_articles / n_total_edits * 100
  )
group_by() Задаёт группировку по одной или нескольким переменным; изменяет "структуру вычислений", но не сами данные. Группы строк (по категориям)
students |>
  group_by(discipline)
summarise() Строит сводку по группам: сворачивает много строк в одну строку на группу (средние, суммы и т.п.). Группы (после group_by())
students |>
  group_by(discipline) |>
  summarise(
    mean_edits = mean(n_total_edits, na.rm = TRUE),
    n_students = n()
  )