워라밸 중독자

[R] Pivot wider <-> Pivot longer 자유자재로 와리가리하기 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] Pivot wider <-> Pivot longer 자유자재로 와리가리하기

Ufungi 2024. 5. 24. 10:04

tidyr package의 pivot_wider(), pivot_longer() 을 와리가리해보자


Dataset은 아래와 같다

> ref_tax
# A tibble: 33,493 × 8
   label       Class           Family              Genus               Kingdom Order               Phylum        Species      
   <chr>       <chr>           <chr>               <chr>               <chr>   <chr>               <chr>         <chr>        
 1 NR_073208_1 Tremellomycetes Trichosporonaceae   Apiotrichum         Fungi   Trichosporonales    Basidiomycota Apiotrichum_…
 2 NR_073209_1 Tremellomycetes Trichosporonaceae   Apiotrichum         Fungi   Trichosporonales    Basidiomycota Apiotrichum_…
 3 NR_073210_1 Tremellomycetes Cryptococcaceae     Kwoniella           Fungi   Tremellales         Basidiomycota Kwoniella_he…
 4 NR_073211_1 Tremellomycetes Tremellaceae        Phaeotremella       Fungi   Tremellales         Basidiomycota Phaeotremell…
 5 NR_073212_1 Tremellomycetes Piskurozymaceae     Solicoccozyma       Fungi   Filobasidiales      Basidiomycota Solicoccozym…
 6 NR_073213_1 Tremellomycetes Trimorphomycetaceae Saitozyma           Fungi   Tremellales         Basidiomycota Saitozyma_po…
 7 NR_073214_1 Tremellomycetes Mrakiaceae          Krasilnikovozyma    Fungi   Cystofilobasidiales Basidiomycota Krasilnikovo…
 8 NR_073215_1 Tremellomycetes Bulleribasidiaceae  Hannaella           Fungi   Tremellales         Basidiomycota Hannaella_lu…
 9 NR_073216_1 Tremellomycetes Trichosporonaceae   Cutaneotrichosporon Fungi   Trichosporonales    Basidiomycota Cutaneotrich…
10 NR_073217_1 Tremellomycetes Cuniculitremaceae   Fellomyces          Fungi   Tremellales         Basidiomycota Fellomyces_p…
# ℹ 33,483 more rows
# ℹ Use `print(n = ...)` to see more rows

 

Pivot longer

# Pivoting longer
> ref_tax <- ref_tax %>% pivot_longer(!label, names_to = 'rank', values_to = 'taxon') %>% as.tibble()
> ref_tax
# A tibble: 234,451 × 3
   label       rank    taxon                 
   <chr>       <chr>   <chr>                 
 1 NR_073208_1 Class   Tremellomycetes       
 2 NR_073208_1 Family  Trichosporonaceae     
 3 NR_073208_1 Genus   Apiotrichum           
 4 NR_073208_1 Kingdom Fungi                 
 5 NR_073208_1 Order   Trichosporonales      
 6 NR_073208_1 Phylum  Basidiomycota         
 7 NR_073208_1 Species Apiotrichum_veenhuisii
 8 NR_073209_1 Class   Tremellomycetes       
 9 NR_073209_1 Family  Trichosporonaceae     
10 NR_073209_1 Genus   Apiotrichum           
# ℹ 234,441 more rows
# ℹ Use `print(n = ...)` to see more rows

 

길어졌다.

 

이제 Pivot wider

# Ensure unique combinations of label and rank
> ref_tax <- ref_tax %>%
+   group_by(label, rank) %>%
+   summarize(taxon = unique(taxon), .groups = 'drop')

> # Pivoting wider
> ref_tax <- ref_tax %>%
+   pivot_wider(names_from = 'rank', values_from = 'taxon')

ref_tax
# A tibble: 33,493 × 8
   label       Class           Family              Genus               Kingdom Order               Phylum        Species      
   <chr>       <chr>           <chr>               <chr>               <chr>   <chr>               <chr>         <chr>        
 1 NR_073208_1 Tremellomycetes Trichosporonaceae   Apiotrichum         Fungi   Trichosporonales    Basidiomycota Apiotrichum_…
 2 NR_073209_1 Tremellomycetes Trichosporonaceae   Apiotrichum         Fungi   Trichosporonales    Basidiomycota Apiotrichum_…
 3 NR_073210_1 Tremellomycetes Cryptococcaceae     Kwoniella           Fungi   Tremellales         Basidiomycota Kwoniella_he…
 4 NR_073211_1 Tremellomycetes Tremellaceae        Phaeotremella       Fungi   Tremellales         Basidiomycota Phaeotremell…
 5 NR_073212_1 Tremellomycetes Piskurozymaceae     Solicoccozyma       Fungi   Filobasidiales      Basidiomycota Solicoccozym…
 6 NR_073213_1 Tremellomycetes Trimorphomycetaceae Saitozyma           Fungi   Tremellales         Basidiomycota Saitozyma_po…
 7 NR_073214_1 Tremellomycetes Mrakiaceae          Krasilnikovozyma    Fungi   Cystofilobasidiales Basidiomycota Krasilnikovo…
 8 NR_073215_1 Tremellomycetes Bulleribasidiaceae  Hannaella           Fungi   Tremellales         Basidiomycota Hannaella_lu…
 9 NR_073216_1 Tremellomycetes Trichosporonaceae   Cutaneotrichosporon Fungi   Trichosporonales    Basidiomycota Cutaneotrich…
10 NR_073217_1 Tremellomycetes Cuniculitremaceae   Fellomyces          Fungi   Tremellales         Basidiomycota Fellomyces_p…
# ℹ 33,483 more rows
# ℹ Use `print(n = ...)` to see more rows

 

넓어졌다.

열 순서는 알파벳 순서로 바뀌었지만 걍 넘어가자.

 

끝.