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.