GISProjekt R

TidyR – uporządkuj swoje dane

Dzisiaj zapoznamy Was z podstawowymi funkcjami biblioteki TidyR, która służy do zmiany kształtu i hierarchi zbioru danych. Zaczniemy jak zawsze od załadowania biblioteki:

library(tidyr)

Do naszego przykładu użyjemy danych, które sami sobie wygenerujemy. Weźmy np. liczbę mężczyzn i kobiet w regionach A i B w dwóch latach 2020 i 2021. Do utworzenia tabeli z takimi danymi wykorzystamy funkcję tibble:

dt = tibble(region = c("A","A","B","B"), 
gender = c("m","f","m","f"),
"2020" = sample(1:1000,4), 
"2021" = sample(1:1000,4))

Nasze dane wyglądają następująco:

dt
# A tibble: 4 x 4
  region gender `2020` `2021`
  <chr>  <chr>   <int>  <int>
1 A      m         802    668
2 A      f         944    602
3 B      m         503    940
4 B      f         543     45

Pierwsza funkcja jaką poznamy to gather, która zamienia kolumny w rzędy:

g = gather(data = dt, '2020', '2021', key = 'year', value = 'count')

Funkcja ta nasze dwie kolumny 2020 i 2021 zamienia na jedną kolumnę o nazwie count i dodatkowo dodaje kolumnę year zawierającą nazwy pierwotnych kolumn:

g
# A tibble: 8 x 4
  region gender year  count
  <chr>  <chr>  <chr> <int>
1 A      m      2020    802
2 A      f      2020    944
3 B      m      2020    503
4 B      f      2020    543
5 A      m      2021    668
6 A      f      2021    602
7 B      m      2021    940
8 B      f      2021     45

Funcja spread zamienia natomiast wiersze na kolumny. My rozdzielimy nasze dane z tabeli g po płci:

s = spread(g,gender,count)
s
# A tibble: 4 x 4
  region year      f     m
  <chr>  <chr> <int> <int>
1 A      2020    944   802
2 A      2021    602   668
3 B      2020    543   503
4 B      2021     45   940

TidyR ma dodatkowo przydatne funkcje do czyszczenia naszych zbiorów z braku danych NA. Dodajmy sobie do naszej tabeli dt brak danych:

dt[3,3] = NA
dt
# A tibble: 4 x 4
  region gender `2020` `2021`
  <chr>  <chr>   <int>  <int>
1 A      m         802    668
2 A      f         944    602
3 B      m          NA    940
4 B      f         543     45

Funkcja drop_na usuwa z naszej ramki danych wiersze z brakami:

drop_na(dt)

Wiersz z brakiem danych został usunięty:

# A tibble: 3 x 4
  region gender `2020` `2021`
  <chr>  <chr>   <int>  <int>
1 A      m         802    668
2 A      f         944    602
3 B      f         543     45

Funkcja fill uzupełnia brak danych wartościami z góry lub z dołu w danej kolumnie:

fill(data = dt,'2020',.direction = "up")

Brakująca wartość została dodana z dolnego wiersza:

# A tibble: 4 x 4
  region gender `2020` `2021`
  <chr>  <chr>   <int>  <int>
1 A      m         802    668
2 A      f         944    602
3 B      m         543    940
4 B      f         543     45

Replace_na służy do zastąpienia braku wartości daną zdefiniowaną przez użytkownika:

replace_na(dt,list('2020'=0))
# A tibble: 4 x 4
  region gender `2020` `2021`
  <chr>  <chr>   <dbl>  <int>
1 A      m         802    668
2 A      f         944    602
3 B      m           0    940
4 B      f         543     45

A co w przypadku, gdy nasze dane w jednej kolumnie zostały zapisane jako ciąg liczb przedzielony separatorem:

# A tibble: 4 x 3
  region gender count  
  <chr>  <chr>  <chr>  
1 A      m      24;34  
2 A      f      719;508
3 B      m      819;981
4 B      f      47;631 

Użyjemy funkcji seperate_rows:

separate_rows(dt,count,sep=';')

Do rozdzielenia naszych kolumn na oddzielne wiersze:

# A tibble: 8 x 3
  region gender count
  <chr>  <chr>  <chr>
1 A      m      24   
2 A      m      34   
3 A      f      719  
4 A      f      508  
5 B      m      819  
6 B      m      981  
7 B      f      47   
8 B      f      631 

Lub też funkcji separate:

separate(dt,count,sep=';',into = c('2020','2021'))

Do rozdzielenia danych na dwie kolumny:

# A tibble: 4 x 4
  region gender `2020` `2021`
  <chr>  <chr>  <chr>  <chr> 
1 A      m      24     34    
2 A      f      719    508   
3 B      m      819    981   
4 B      f      47     631

Powrót do zapisu z separatorem umożliwia funkcja unite:

unite(dt,'2020','2021',col = "count",sep = "-")
# A tibble: 4 x 3
  region gender count  
  <chr>  <chr>  <chr>  
1 A      m      24-34  
2 A      f      719-508
3 B      m      819-981
4 B      f      47-631 

Narzędzia biblioteki tidyR są bardzo przydatne do uporządkowania naszych danych tak abyśmy mogli prowadzenić na nich analizy czy też tworzyć na ich podstawie wykresy.