Jak przekształcać dane między szerokimi i długimi formatami w r


Ramkę danych w R można wyświetlić w formacie szerokim lub długim .

W zależności od celu możesz chcieć, aby ramka danych była w jednym z tych konkretnych formatów.

Najłatwiejszym sposobem zmiany kształtu danych pomiędzy tymi formatami jest użycie dwóch poniższych funkcji z pakietu Tidyr w R:

  • obrotowe_longer() : zmienia kształt bloku danych z formatu szerokiego na format długi.
  • obrotowe_wider() : zmienia kształt bloku danych z formatu długiego na format szeroki.

Poniższe przykłady pokazują, jak wykorzystać każdą funkcję w praktyce.

Przykład 1: Zmień kształt danych z szerokich na długie

Załóżmy, że mamy następującą ramkę danych w R, która jest obecnie w szerokim formacie:

 #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 to 12 22
2 B 15 29
3 C 19 18
4 D 19 12

Możemy użyć funkcji obrotu_longer() , aby obrócić tę ramkę danych do długiego formatu:

 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

Należy pamiętać, że nazwy kolumn rok1 i rok2 są teraz używane jako wartości w nowej kolumnie o nazwie „rok”, a wartości z tych oryginalnych kolumn są umieszczane w nowej kolumnie o nazwie „punkty”.

Efektem końcowym jest długa ramka danych.

Uwaga : pełną dokumentację funkcji obrotowej() można znaleźć tutaj .

Przykład 2: Zmień kształt danych z długich na szerokie

Załóżmy, że mamy następującą ramkę danych w R, która jest obecnie w długim formacie:

 #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

Możemy użyć funkcji obrotu_wider() , aby obrócić tę ramkę danych do szerokiego formatu:

 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

Należy pamiętać, że wartości w kolumnie statystyk są teraz używane jako nazwy kolumn, a wartości w kolumnie kwoty są używane jako wartości komórek w tych nowych kolumnach.

Efektem końcowym jest duży blok danych.

Uwaga : pełną dokumentację funkcji obrotowej() można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w języku R:

Jak policzyć unikalne wartości według grupy w R
Jak liczyć wartości inne niż NA w R
Jak utworzyć tabele częstości względnych w R

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *