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()
)
|
