Pivot в R

Материал из Поле цифровой дидактики
Версия от 13:06, 2 марта 2026; Patarakin (обсуждение | вклад) (Новая страница: «{{Scripting Tutorials |Description=Pivot в R (из пакета tidyr) — это "поворот" или "сводка данных", простыми словами — инструмент для перестройки формы таблицы: из длинной (long) в широкую (wide) и наоборот. Представьте, что данные — это пластилин: pivot_longer "растягивает" таблицу вниз,...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Описание 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