Фрейм данных в R может отображаться в широком или длинном формате .
В зависимости от вашей цели вы можете захотеть, чтобы фрейм данных был в одном из этих конкретных форматов.
Самый простой способ преобразовать данные между этими форматами — использовать следующие две функции из пакета tidyr в R:
- pivot_longer() : изменяет формат фрейма данных с широкого на длинный.
- pivot_wider() : изменяет форму фрейма данных из длинного в широкий формат.
В следующих примерах показано, как использовать каждую функцию на практике.
Пример 1. Изменение формы данных с широких на длинные
Предположим, у нас есть следующий фрейм данных в R, который в настоящее время находится в широком формате:
#create data frame
df <- data.frame(player=c('A', 'B', 'C', 'D'),
year1=c(12, 15, 19, 19),
year2=c(22, 29, 18, 12))
#view data frame
df
player year1 year2
1 A 12 22
2 B 15 29
3 C 19 18
4 D 19 12
Мы можем использовать функцию pivot_longer() , чтобы преобразовать этот фрейм данных в длинный формат:
library(tidyr)
#pivot the data frame into a long format
df %>% pivot_longer(cols=c('year1', 'year2'),
names_to='year',
values_to='points')
# A tibble: 8 x 3
player year points
1 A year1 12
2 A year2 22
3 B year1 15
4 B year2 29
5 C year1 19
6 C year2 18
7 D year1 19
8 D year2 12
Обратите внимание, что имена столбцов year1 и year2 теперь используются в качестве значений в новом столбце под названием «год», а значения из этих исходных столбцов помещаются в один новый столбец под названием «баллы».
Конечным результатом является длинный фрейм данных.
Примечание.Полную документацию по функции pivot_longer() можно найти здесь .
Пример 2: изменение формы данных с длинных на широкие
Предположим, у нас есть следующий фрейм данных в R, который в настоящее время имеет длинный формат:
#create data frame
df <- data.frame(player=rep(c('A', 'B'), each= 4 ),
year=rep(c(1, 1, 2, 2), times= 2 ),
stat=rep(c('points', 'assists'), times= 4 ),
amount=c(14, 6, 18, 7, 22, 9, 38, 4))
#view data frame
df
player year stat amount
1 A 1 points 14
2 A 1 assists 6
3 A 2 points 18
4 A 2 assists 7
5 B 1 points 22
6 B 1 assists 9
7 B 2 points 38
8 B 2 assists 4
Мы можем использовать функцию pivot_wider() , чтобы преобразовать этот фрейм данных в широкий формат:
library(tidyr)
#pivot the data frame into a wide format
df %>% pivot_wider(names_from = stat, values_from = amount)
# A tibble: 4 x 4
player year points assists
1 A 1 14 6
2 A 2 18 7
3 B 1 22 9
4 B 2 38 4
Обратите внимание, что значения из столбца статистики теперь используются в качестве имен столбцов, а значения из столбца количества используются в качестве значений ячеек в этих новых столбцах.
Конечным результатом является широкий фрейм данных.
Примечание.Полную документацию по функции pivot_wider() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:
Как подсчитать уникальные значения по группе в R
Как подсчитать значения, не относящиеся к NA, в R
Как создать таблицы относительных частот в R