reshape2
reshape2
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 reshape2
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
melt()
Transformeeri lai andmestik pikaks.
library(reshape2)
# Näide 1
melt(andmed, id.vars=c("nimi", "sugu"))
## nimi sugu variable value
## 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
melt(andmed, id.vars=1:2)
## nimi sugu variable value
## 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
melt(andmed, measure.vars=c("vanus", "pikkus", "kaal"))
## nimi sugu variable value
## 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
melt(andmed, measure.vars=3:5)
## nimi sugu variable value
## 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 5
melt(andmed, measure.vars=2:5)
## Warning: attributes are not identical across measure variables; they will
## be dropped
## nimi variable value
## 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
dcast()
Transformeeri pikk andmestik laiaks.
# pikas formaadis andmed
andmed.m = melt(andmed, id.vars=c("nimi", "sugu"))
andmed.m
## nimi sugu variable value
## 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
dcast(andmed.m, nimi + sugu ~ variable, value.var = "value")
## nimi sugu vanus pikkus kaal
## 1 Kati N 30 150 50
## 2 Mati M 20 180 80
## 3 Toomas M 60 200 100
Abiks võib olla järgmine värviline illustratsioon.