Átstrukturálás
Az adatbevitelnél gyakran "wide" formátumban rögzítik az adatokat, a modellezésnél viszont a "long" formátum a kedvezőbb.
- példa wide formátumra
# adatok betoltese
data(dyslex)
# folso nehany sor
head(dyslex)
## id nem csoport oszt kor figyzavar szokincs olv_helyes1 olv_helyes2
## 1 s1 fiu kontroll 3 117 50 32 28 17
## 2 s2 fiu kontroll 3 115 63 49 41 29
## 3 s3 fiu kontroll 2 108 51 20 34 35
## 4 s4 fiu kontroll 3 117 69 35 26 18
## 5 s5 fiu kontroll 3 123 53 31 28 21
## 6 s6 fiu kontroll 3 115 60 30 40 38
## olv_helyes3 sp_helyes1 sp_helyes2 sp_helyes3 sp_helyes4 sp_helyes5
## 1 18 28 20 19 17 19
## 2 23 29 17 18 17 19
## 3 26 19 14 12 12 9
## 4 19 20 14 11 12 12
## 5 21 16 5 17 14 13
## 6 36 26 14 20 18 13
## figy_csop olvasas helyesiras
## 1 kontroll 63 103
## 2 kontroll 93 100
## 3 kontroll 95 66
## 4 adhd 63 69
## 5 kontroll 70 65
## 6 kontroll 114 91
- elemezzük csak az olvasást
dyslex_read <- subset(dyslex,
select = -(sp_helyes1:sp_helyes5))
head(dyslex_read)
## id nem csoport oszt kor figyzavar szokincs olv_helyes1 olv_helyes2
## 1 s1 fiu kontroll 3 117 50 32 28 17
## 2 s2 fiu kontroll 3 115 63 49 41 29
## 3 s3 fiu kontroll 2 108 51 20 34 35
## 4 s4 fiu kontroll 3 117 69 35 26 18
## 5 s5 fiu kontroll 3 123 53 31 28 21
## 6 s6 fiu kontroll 3 115 60 30 40 38
## olv_helyes3 figy_csop olvasas helyesiras
## 1 18 kontroll 63 103
## 2 23 kontroll 93 100
## 3 26 kontroll 95 66
## 4 19 adhd 63 69
## 5 21 kontroll 70 65
## 6 36 kontroll 114 91
- alakítsuk át long formátumba (legyen egy 'blokk' és egy 'olv_helyes' valtozonk)
dyslex_read_long <- reshape(dyslex_read,
varying = c("olv_helyes1", "olv_helyes2", "olv_helyes3"),
timevar = "blokk",
v.names = "olv_helyes",
direction = "long")
head(dyslex_read_long)
## id nem csoport oszt kor figyzavar szokincs figy_csop olvasas
## s1.1 s1 fiu kontroll 3 117 50 32 kontroll 63
## s2.1 s2 fiu kontroll 3 115 63 49 kontroll 93
## s3.1 s3 fiu kontroll 2 108 51 20 kontroll 95
## s4.1 s4 fiu kontroll 3 117 69 35 adhd 63
## s5.1 s5 fiu kontroll 3 123 53 31 kontroll 70
## s6.1 s6 fiu kontroll 3 115 60 30 kontroll 114
## helyesiras blokk olv_helyes
## s1.1 103 1 28
## s2.1 100 1 41
## s3.1 66 1 34
## s4.1 69 1 26
## s5.1 65 1 28
## s6.1 91 1 40
- a reshape2 csomaggal egyszerűbb
library(reshape2)
##
## Attaching package: 'reshape2'
##
## The following objects are masked from 'package:data.table':
##
## dcast, melt
dyslex_read_long2 <- melt(
dyslex_read,
measure.vars = c("olv_helyes1", "olv_helyes2", "olv_helyes3"),
variable.name = "mutato",
value.name = "ertek")
- talán még egyszerűbb a tidyr csomaggal
library(tidyr)
dyslex_read_long3 <- gather(dyslex_read, mutato, ertek,
olv_helyes1:olv_helyes3)
- és szintén kellemes (es nagyon gyors) a data.table megoldása
library(data.table)
dyslex_read_long4 <- melt(data.table(dyslex_read),
measure.vars = c("olv_helyes1", "olv_helyes2", "olv_helyes3"),
variable.name = "mutato",
value.name = "ertek")
- long-ból wide formátumba:
- base:
reshape(..., direction = "wide")
- reshape2, data.table:
?dcast
- tidyr:
spread
- base:
# tidyr
dyslex_orig <- spread(dyslex_read_long3, mutato, ertek)
str(dyslex_orig)
## 'data.frame': 101 obs. of 13 variables:
## $ id : Factor w/ 101 levels "s1","s10","s100",..: 1 14 25 36 47 58 69 80 91 2 ...
## $ nem : Factor w/ 2 levels "lany","fiu": 2 2 2 2 2 2 2 1 2 1 ...
## $ csoport : Factor w/ 2 levels "kontroll","sni": 1 1 1 1 1 1 1 1 1 1 ...
## $ oszt : num 3 3 2 3 3 3 3 3 2 3 ...
## $ kor : num 117 115 108 117 123 115 119 109 102 107 ...
## $ figyzavar : num 50 63 51 69 53 60 57 54 50 50 ...
## $ szokincs : num 32 49 20 35 31 30 40 36 47 32 ...
## $ figy_csop : Ord.factor w/ 2 levels "kontroll"<"adhd": 1 1 1 2 1 1 1 1 1 1 ...
## $ olvasas : num 63 93 95 63 70 114 120 100 101 49 ...
## $ helyesiras : num 103 100 66 69 65 91 79 79 54 66 ...
## $ olv_helyes1: num 28 41 34 26 28 40 44 36 39 17 ...
## $ olv_helyes2: num 17 29 35 18 21 38 40 36 30 16 ...
## $ olv_helyes3: num 18 23 26 19 21 36 36 28 32 16 ...