tidyr
tidyr
on Hadley Wickhami kirjutatud R-i pakett, mis aitab laias formaadis andmetabelit transformeerida pikas formaadis andmestikuks ja vastupidi.
Laias formaadis andmestik - üks rida vastab ühele objektile. Selles reas on kirjas kõik, mis antud objekti kohta üldse mõõdetud on.
Pikas formaadis andmestik - ühe objekti andmed võivad esineda mitmel real. Iga rida kirjeldab ühe objekti ühte tunnust. Loomulikult võib laia ja pika formaadi vahel olla palju vahepealseid variante – näiteks ka ülaltoodud pikka formaati saab veel pikemaks venitada (kuidas?).
Paljud paketid tahavad sisendiks pikas formaadis andmeid (nt ggplot2
pakett või funktsioonid lm(), glm()
). Inimestel on aga mugavam vaadelda ja sisestada andmeid laias formaadis. Loe artiklist Tidy Data, milline on Hadley Wickham’i arvates hea andmete esitusviis.
Järgnevalt on toodud minimalistlikud näited, mis iseloomustavad paketi tidyr
funktsionaalsust.
andmed = data.frame(nimi= c("Mati", "Toomas", "Kati"),
sugu = c("M", "M", "N"),
vanus = c(20, 60, 30),
pikkus = c(180, 200, 150),
kaal = c(80, 100, 50))
andmed
## nimi sugu vanus pikkus kaal
## 1 Mati M 20 180 80
## 2 Toomas M 60 200 100
## 3 Kati N 30 150 50
gather()
Transformeeri lai andmestik pikaks.
library(tidyr)
# Näide 1
gather(andmed, key=tunnus, value=vaartus, vanus, pikkus, kaal)
## nimi sugu tunnus vaartus
## 1 Mati M vanus 20
## 2 Toomas M vanus 60
## 3 Kati N vanus 30
## 4 Mati M pikkus 180
## 5 Toomas M pikkus 200
## 6 Kati N pikkus 150
## 7 Mati M kaal 80
## 8 Toomas M kaal 100
## 9 Kati N kaal 50
# Näide 2
gather(andmed, key=tunnus, value=vaartus, vanus:kaal)
## nimi sugu tunnus vaartus
## 1 Mati M vanus 20
## 2 Toomas M vanus 60
## 3 Kati N vanus 30
## 4 Mati M pikkus 180
## 5 Toomas M pikkus 200
## 6 Kati N pikkus 150
## 7 Mati M kaal 80
## 8 Toomas M kaal 100
## 9 Kati N kaal 50
# Näide 3
gather(andmed, key=tunnus, value=vaartus, -nimi, -sugu)
## nimi sugu tunnus vaartus
## 1 Mati M vanus 20
## 2 Toomas M vanus 60
## 3 Kati N vanus 30
## 4 Mati M pikkus 180
## 5 Toomas M pikkus 200
## 6 Kati N pikkus 150
## 7 Mati M kaal 80
## 8 Toomas M kaal 100
## 9 Kati N kaal 50
# Näide 4
gather(andmed, key=tunnus, value=vaartus, -nimi)
## Warning: attributes are not identical across measure variables; they will
## be dropped
## nimi tunnus vaartus
## 1 Mati sugu M
## 2 Toomas sugu M
## 3 Kati sugu N
## 4 Mati vanus 20
## 5 Toomas vanus 60
## 6 Kati vanus 30
## 7 Mati pikkus 180
## 8 Toomas pikkus 200
## 9 Kati pikkus 150
## 10 Mati kaal 80
## 11 Toomas kaal 100
## 12 Kati kaal 50
# Näide 5
gather_(andmed, key_col="tunnus", value_col="vaartus",
gather_cols = c("sugu","vanus","pikkus","kaal"))
## Warning: attributes are not identical across measure variables; they will
## be dropped
## nimi tunnus vaartus
## 1 Mati sugu M
## 2 Toomas sugu M
## 3 Kati sugu N
## 4 Mati vanus 20
## 5 Toomas vanus 60
## 6 Kati vanus 30
## 7 Mati pikkus 180
## 8 Toomas pikkus 200
## 9 Kati pikkus 150
## 10 Mati kaal 80
## 11 Toomas kaal 100
## 12 Kati kaal 50
spread()
Transformeeri pikk andmestik laiaks.
# pikas formaadis andmed
andmed.pikk = gather(andmed, key=tunnus, value=vaartus, -nimi, -sugu)
andmed.pikk
## nimi sugu tunnus vaartus
## 1 Mati M vanus 20
## 2 Toomas M vanus 60
## 3 Kati N vanus 30
## 4 Mati M pikkus 180
## 5 Toomas M pikkus 200
## 6 Kati N pikkus 150
## 7 Mati M kaal 80
## 8 Toomas M kaal 100
## 9 Kati N kaal 50
# Näide 1
spread(andmed.pikk, key=tunnus, value=vaartus)
## nimi sugu kaal pikkus vanus
## 1 Kati N 50 150 30
## 2 Mati M 80 180 20
## 3 Toomas M 100 200 60
# Näide 2
spread_(andmed.pikk, key_col="tunnus", value_col="vaartus")
## nimi sugu kaal pikkus vanus
## 1 Kati N 50 150 30
## 2 Mati M 80 180 20
## 3 Toomas M 100 200 60