Как изменить форму данных между широким и длинным форматом в R


Фрейм данных в 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.