Bevezetés az R-be 2.0 - Feladatgyűjtemény

Adattábla átalakítása: hosszú-széles

1. feladat. Szélesből hosszú átalakítás.
Három személy 3 napos tréningen vesz részt, amelynek része egy speciális IQ teszt és kreativitás teszt kitöltése a tréning minden napján. Az adatokat a lenti táblázatnak megfelelően rögzítsük rövid formátumban. Alakítsuk át az adattáblát hosszú formátumuvá!

Személy 1.nap, IQ 1.nap, KREAT 2.nap, IQ 2.nap, KREAT 3.nap, IQ 3.nap, KREAT
1 8 12 10 8 13 6
2 12 10 12 9 7 12
3 9 7 12 10 12 8

Széles adattábla elkészítése

szemely  <- 1:3
nap.1_IQ <- c(8,12,9)
nap.1_KREAT <- c(12,10,7)
nap.2_IQ <- c(10,12,12)
nap.2_KREAT <- c(8,9,10)
nap.3_IQ <- c(13,7,12)
nap.3_KREAT <- c(6,12,8)

(d <- data.frame(szemely, nap.1_IQ, nap.1_KREAT, nap.2_IQ, nap.2_KREAT, nap.3_IQ, nap.3_KREAT))
  szemely nap.1_IQ nap.1_KREAT nap.2_IQ nap.2_KREAT nap.3_IQ nap.3_KREAT
1       1        8          12       10           8       13           6
2       2       12          10       12           9        7          12
3       3        9           7       12          10       12           8

Hosszúból széles átalakítás

library(reshape2)
d.2 <- melt(data = d, id.vars="szemely", 
     measure.vars=c("nap.1_IQ", "nap.1_KREAT", "nap.2_IQ", "nap.2_KREAT", "nap.3_IQ", "nap.3_KREAT"),
     variable.name="csoport", value.name="eredmeny")
d.2
   szemely     csoport eredmeny
1        1    nap.1_IQ        8
2        2    nap.1_IQ       12
3        3    nap.1_IQ        9
4        1 nap.1_KREAT       12
5        2 nap.1_KREAT       10
6        3 nap.1_KREAT        7
7        1    nap.2_IQ       10
8        2    nap.2_IQ       12
9        3    nap.2_IQ       12
10       1 nap.2_KREAT        8
11       2 nap.2_KREAT        9
12       3 nap.2_KREAT       10
13       1    nap.3_IQ       13
14       2    nap.3_IQ        7
15       3    nap.3_IQ       12
16       1 nap.3_KREAT        6
17       2 nap.3_KREAT       12
18       3 nap.3_KREAT        8

Csoport változó szétválasztása

d.2$trening <- sapply(strsplit(x = as.character(d.2$csoport), split = "_", fixed = T), 
       function(x) x[1])
d.2$teszt <- sapply(strsplit(x = as.character(d.2$csoport), split = "_", fixed = T), 
       function(x) x[2])
d.2
   szemely     csoport eredmeny trening teszt
1        1    nap.1_IQ        8   nap.1    IQ
2        2    nap.1_IQ       12   nap.1    IQ
3        3    nap.1_IQ        9   nap.1    IQ
4        1 nap.1_KREAT       12   nap.1 KREAT
5        2 nap.1_KREAT       10   nap.1 KREAT
6        3 nap.1_KREAT        7   nap.1 KREAT
7        1    nap.2_IQ       10   nap.2    IQ
8        2    nap.2_IQ       12   nap.2    IQ
9        3    nap.2_IQ       12   nap.2    IQ
10       1 nap.2_KREAT        8   nap.2 KREAT
11       2 nap.2_KREAT        9   nap.2 KREAT
12       3 nap.2_KREAT       10   nap.2 KREAT
13       1    nap.3_IQ       13   nap.3    IQ
14       2    nap.3_IQ        7   nap.3    IQ
15       3    nap.3_IQ       12   nap.3    IQ
16       1 nap.3_KREAT        6   nap.3 KREAT
17       2 nap.3_KREAT       12   nap.3 KREAT
18       3 nap.3_KREAT        8   nap.3 KREAT

2. feladat. Hosszúból széles átalakítás.
Három személy 3 napos tréningen vesz részt, amelynek része egy speciális IQ teszt és kreativitás teszt kitöltése a tréning minden napján. Az adatokat a lenti táblázatnak megfelelően rögzítsük hosszú formátumban. Alakítsuk át az adattáblát széles formátumuvá!

Személy Tréning Teszt Eredmény
1 1.nap IQ 8
1 1.nap KREAT 9
2 1.nap IQ 12
2 1.nap KREAT 5
3 1.nap IQ 9
3 1.nap KREAT 11
1 2.nap IQ 11
1 2.nap KREAT 12
2 2.nap IQ 11
2 2.nap KREAT 9
3 2.nap IQ 11
3 2.nap KREAT 10
1 3.nap IQ 10
1 3.nap KREAT 11
2 3.nap IQ 9
2 3.nap KREAT 11
3 3.nap IQ 7
3 3.nap KREAT 12

Hosszú adattábla elkészítése

szemely  <- rep(1:3, each = 2, times=3)
trening  <- gl(n = 3, k = 6, labels=c("nap.1", "nap.2", "nap.3"))
teszt    <- gl(n=2, k=1, length = 18, labels=c("IQ", "KREAT"))
eredmeny <- c(8, 9, 12, 5, 9, 11, 11, 12, 11, 9, 11, 10, 10, 11, 9, 11, 7, 12)
(d <- data.frame(szemely, trening, teszt, eredmeny))
   szemely trening teszt eredmeny
1        1   nap.1    IQ        8
2        1   nap.1 KREAT        9
3        2   nap.1    IQ       12
4        2   nap.1 KREAT        5
5        3   nap.1    IQ        9
6        3   nap.1 KREAT       11
7        1   nap.2    IQ       11
8        1   nap.2 KREAT       12
9        2   nap.2    IQ       11
10       2   nap.2 KREAT        9
11       3   nap.2    IQ       11
12       3   nap.2 KREAT       10
13       1   nap.3    IQ       10
14       1   nap.3 KREAT       11
15       2   nap.3    IQ        9
16       2   nap.3 KREAT       11
17       3   nap.3    IQ        7
18       3   nap.3 KREAT       12

Hosszúból széles átalakítás

library(reshape2)
dcast(data = d, formula = szemely ~ trening + teszt, value.var = "eredmeny")
  szemely nap.1_IQ nap.1_KREAT nap.2_IQ nap.2_KREAT nap.3_IQ nap.3_KREAT
1       1        8           9       11          12       10          11
2       2       12           5       11           9        9          11
3       3        9          11       11          10        7          12