1. feladat. Adattáblák összekapcsolása.
Az elemzések során a vizsgálati személyek szocio-demográfia adatait (nem, életkor, iskolai végzettség stb.) és a vizsgálat során keletkező adatait (pl. reakcióidő) gyakran külön tároljuk. Az elemzés egy adott fázisában szükség lehet a két adattábla egyesítésére. (Ez a művelet az adatbázis-kezelés összekapcsolás vagy join művelete.) Végezzük el a feladatot!
d.szemelyek <- read.table("http://users.atw.hu/rdata/merge_szemelyek.txt",
sep="\t", header=T, dec=".", quote="", comment.char="")
d.szemelyek # 5 személy
SUBJECT NEME ELETKOR
1 KS f 12
2 TR f 11
3 SE f 12
4 AK n 11
5 TF n 11
d.vizsgalat <- read.table("http://users.atw.hu/rdata/merge_vizsgalat.txt",
sep="\t", header=T, dec=".", quote="", comment.char="")
d.vizsgalat
SUBJECT KERDES RI
1 KS k.1 1305
2 KS k.2 1238
3 KS k.3 627
4 KS k.4 906
5 KS k.5 1422
6 KS k.6 1093
7 KS k.7 545
8 KS k.8 848
9 KS k.9 572
10 KS k.10 790
11 TR k.1 1427
12 TR k.2 1391
13 TR k.3 1341
14 TR k.4 1020
15 TR k.5 1456
16 TR k.6 1293
17 TR k.7 1204
18 TR k.8 1363
19 TR k.9 644
20 TR k.10 1155
21 SE k.1 1218
22 SE k.2 910
23 SE k.3 1265
24 SE k.4 538
25 SE k.5 1405
26 SE k.6 790
27 SE k.7 682
28 SE k.8 999
29 SE k.9 1078
30 SE k.10 926
31 AK k.1 544
32 AK k.2 524
33 AK k.3 913
34 AK k.4 1218
35 AK k.5 1445
36 AK k.6 583
37 AK k.7 771
38 AK k.8 923
39 AK k.9 787
40 AK k.10 1254
41 TF k.1 600
42 TF k.2 867
43 TF k.3 906
44 TF k.4 916
45 TF k.5 740
46 TF k.6 1478
47 TF k.7 766
48 TF k.8 535
49 TF k.9 1161
50 TF k.10 1472
A merge()
függvény segítségével a beolvasott adatainkat egyetlen adattáblában tárolhatjuk el. A paraméterben felsoroljuk a két összekapcsolandó adattábla nevét (x=
, y=
), majd a közös oszlop nevét (by=
) adjuk meg. Az összekapcsolás során egy sorba kerülnek az azonos SUBJECT
oszlopbeli értékkel rendelkező adatmezők a két adattáblából. Az új adattábla oszlopai a két kiinduló adattáblából tevődnek össze, a kapcsoló oszlop egyszer fog megjelenni.
merge(x=d.szemelyek, y=d.vizsgalat, by="SUBJECT")
SUBJECT NEME ELETKOR KERDES RI
1 AK n 11 k.1 544
2 AK n 11 k.2 524
3 AK n 11 k.3 913
4 AK n 11 k.4 1218
5 AK n 11 k.5 1445
6 AK n 11 k.6 583
7 AK n 11 k.7 771
8 AK n 11 k.8 923
9 AK n 11 k.9 787
10 AK n 11 k.10 1254
11 KS f 12 k.1 1305
12 KS f 12 k.2 1238
13 KS f 12 k.3 627
14 KS f 12 k.4 906
15 KS f 12 k.5 1422
16 KS f 12 k.6 1093
17 KS f 12 k.7 545
18 KS f 12 k.8 848
19 KS f 12 k.9 572
20 KS f 12 k.10 790
21 SE f 12 k.1 1218
22 SE f 12 k.2 910
23 SE f 12 k.3 1265
24 SE f 12 k.4 538
25 SE f 12 k.5 1405
26 SE f 12 k.6 790
27 SE f 12 k.7 682
28 SE f 12 k.8 999
29 SE f 12 k.9 1078
30 SE f 12 k.10 926
31 TF n 11 k.1 600
32 TF n 11 k.2 867
33 TF n 11 k.3 906
34 TF n 11 k.4 916
35 TF n 11 k.5 740
36 TF n 11 k.6 1478
37 TF n 11 k.7 766
38 TF n 11 k.8 535
39 TF n 11 k.9 1161
40 TF n 11 k.10 1472
41 TR f 11 k.1 1427
42 TR f 11 k.2 1391
43 TR f 11 k.3 1341
44 TR f 11 k.4 1020
45 TR f 11 k.5 1456
46 TR f 11 k.6 1293
47 TR f 11 k.7 1204
48 TR f 11 k.8 1363
49 TR f 11 k.9 644
50 TR f 11 k.10 1155
Tegyük fel, hogy még egy személyről van demográfiai adatunk, de ő még nem végezte a kísérletet. Ekkor az összekapcsolásnál figyelnünk kell. Először hozzunk létre egy új adattáblát a d.szemelyek alapján, amely egy új személy adatait is tartalmazza:
d.szemelyek.2 <- rbind(d.szemelyek, data.frame(SUBJECT="ZsV", NEME="f", ELETKOR=13))
d.szemelyek.2
SUBJECT NEME ELETKOR
1 KS f 12
2 TR f 11
3 SE f 12
4 AK n 11
5 TF n 11
6 ZsV f 13
Az egyszerű összekapcsolás most nem megfelelő, hiszen ZsV-t kihagyja az outputból:
merge(d.szemelyek.2, d.vizsgalat, by="SUBJECT")
SUBJECT NEME ELETKOR KERDES RI
1 AK n 11 k.1 544
2 AK n 11 k.2 524
3 AK n 11 k.3 913
4 AK n 11 k.4 1218
5 AK n 11 k.5 1445
6 AK n 11 k.6 583
7 AK n 11 k.7 771
8 AK n 11 k.8 923
9 AK n 11 k.9 787
10 AK n 11 k.10 1254
11 KS f 12 k.1 1305
12 KS f 12 k.2 1238
13 KS f 12 k.3 627
14 KS f 12 k.4 906
15 KS f 12 k.5 1422
16 KS f 12 k.6 1093
17 KS f 12 k.7 545
18 KS f 12 k.8 848
19 KS f 12 k.9 572
20 KS f 12 k.10 790
21 SE f 12 k.1 1218
22 SE f 12 k.2 910
23 SE f 12 k.3 1265
24 SE f 12 k.4 538
25 SE f 12 k.5 1405
26 SE f 12 k.6 790
27 SE f 12 k.7 682
28 SE f 12 k.8 999
29 SE f 12 k.9 1078
30 SE f 12 k.10 926
31 TF n 11 k.1 600
32 TF n 11 k.2 867
33 TF n 11 k.3 906
34 TF n 11 k.4 916
35 TF n 11 k.5 740
36 TF n 11 k.6 1478
37 TF n 11 k.7 766
38 TF n 11 k.8 535
39 TF n 11 k.9 1161
40 TF n 11 k.10 1472
41 TR f 11 k.1 1427
42 TR f 11 k.2 1391
43 TR f 11 k.3 1341
44 TR f 11 k.4 1020
45 TR f 11 k.5 1456
46 TR f 11 k.6 1293
47 TR f 11 k.7 1204
48 TR f 11 k.8 1363
49 TR f 11 k.9 644
50 TR f 11 k.10 1155
A megfelelő összekacsoláshoz használjuk az all.x=T
argumentumot, amely biztosítja, hogy a első (x=
) paraméterben szereplő d.szemelyek.2
adattáblából minden sor megjelenjen az outputban.
merge(d.szemelyek.2, d.vizsgalat, by="SUBJECT", all.x=T)
SUBJECT NEME ELETKOR KERDES RI
1 AK n 11 k.1 544
2 AK n 11 k.2 524
3 AK n 11 k.3 913
4 AK n 11 k.4 1218
5 AK n 11 k.5 1445
6 AK n 11 k.6 583
7 AK n 11 k.7 771
8 AK n 11 k.8 923
9 AK n 11 k.9 787
10 AK n 11 k.10 1254
11 KS f 12 k.1 1305
12 KS f 12 k.2 1238
13 KS f 12 k.3 627
14 KS f 12 k.4 906
15 KS f 12 k.5 1422
16 KS f 12 k.6 1093
17 KS f 12 k.7 545
18 KS f 12 k.8 848
19 KS f 12 k.9 572
20 KS f 12 k.10 790
21 SE f 12 k.1 1218
22 SE f 12 k.2 910
23 SE f 12 k.3 1265
24 SE f 12 k.4 538
25 SE f 12 k.5 1405
26 SE f 12 k.6 790
27 SE f 12 k.7 682
28 SE f 12 k.8 999
29 SE f 12 k.9 1078
30 SE f 12 k.10 926
31 TF n 11 k.1 600
32 TF n 11 k.2 867
33 TF n 11 k.3 906
34 TF n 11 k.4 916
35 TF n 11 k.5 740
36 TF n 11 k.6 1478
37 TF n 11 k.7 766
38 TF n 11 k.8 535
39 TF n 11 k.9 1161
40 TF n 11 k.10 1472
41 TR f 11 k.1 1427
42 TR f 11 k.2 1391
43 TR f 11 k.3 1341
44 TR f 11 k.4 1020
45 TR f 11 k.5 1456
46 TR f 11 k.6 1293
47 TR f 11 k.7 1204
48 TR f 11 k.8 1363
49 TR f 11 k.9 644
50 TR f 11 k.10 1155
51 ZsV f 13 <NA> NA
Amennyiben olyan személyről is van vizsgálati adatunk, akinek a demográfiai adatait még nem rögzítettük, akkor a fenti esethez hasonló módosítást kell végrehajtani az argumentumban.
adatok.VE <- data.frame(SUBJECT=rep("VE",10),
KERDES=paste(sep=".","k",1:10),
RI=c(657, 1203, 785, 914, 1327, 799, 1129, 1411, 891, 582 ))
d.vizsgalat.2 <- rbind(d.vizsgalat, adatok.VE)
d.vizsgalat.2
SUBJECT KERDES RI
1 KS k.1 1305
2 KS k.2 1238
3 KS k.3 627
4 KS k.4 906
5 KS k.5 1422
6 KS k.6 1093
7 KS k.7 545
8 KS k.8 848
9 KS k.9 572
10 KS k.10 790
11 TR k.1 1427
12 TR k.2 1391
13 TR k.3 1341
14 TR k.4 1020
15 TR k.5 1456
16 TR k.6 1293
17 TR k.7 1204
18 TR k.8 1363
19 TR k.9 644
20 TR k.10 1155
21 SE k.1 1218
22 SE k.2 910
23 SE k.3 1265
24 SE k.4 538
25 SE k.5 1405
26 SE k.6 790
27 SE k.7 682
28 SE k.8 999
29 SE k.9 1078
30 SE k.10 926
31 AK k.1 544
32 AK k.2 524
33 AK k.3 913
34 AK k.4 1218
35 AK k.5 1445
36 AK k.6 583
37 AK k.7 771
38 AK k.8 923
39 AK k.9 787
40 AK k.10 1254
41 TF k.1 600
42 TF k.2 867
43 TF k.3 906
44 TF k.4 916
45 TF k.5 740
46 TF k.6 1478
47 TF k.7 766
48 TF k.8 535
49 TF k.9 1161
50 TF k.10 1472
51 VE k.1 657
52 VE k.2 1203
53 VE k.3 785
54 VE k.4 914
55 VE k.5 1327
56 VE k.6 799
57 VE k.7 1129
58 VE k.8 1411
59 VE k.9 891
60 VE k.10 582
A helyes összekapcsolás az all.y=T
használatával:
merge(d.szemelyek, d.vizsgalat.2, by="SUBJECT", all.y=T)
SUBJECT NEME ELETKOR KERDES RI
1 AK n 11 k.6 583
2 AK n 11 k.7 771
3 AK n 11 k.5 1445
4 AK n 11 k.1 544
5 AK n 11 k.2 524
6 AK n 11 k.3 913
7 AK n 11 k.4 1218
8 AK n 11 k.9 787
9 AK n 11 k.10 1254
10 AK n 11 k.8 923
11 KS f 12 k.10 790
12 KS f 12 k.2 1238
13 KS f 12 k.9 572
14 KS f 12 k.1 1305
15 KS f 12 k.6 1093
16 KS f 12 k.3 627
17 KS f 12 k.4 906
18 KS f 12 k.5 1422
19 KS f 12 k.7 545
20 KS f 12 k.8 848
21 SE f 12 k.2 910
22 SE f 12 k.3 1265
23 SE f 12 k.4 538
24 SE f 12 k.1 1218
25 SE f 12 k.6 790
26 SE f 12 k.7 682
27 SE f 12 k.8 999
28 SE f 12 k.5 1405
29 SE f 12 k.10 926
30 SE f 12 k.9 1078
31 TF n 11 k.10 1472
32 TF n 11 k.8 535
33 TF n 11 k.9 1161
34 TF n 11 k.1 600
35 TF n 11 k.2 867
36 TF n 11 k.3 906
37 TF n 11 k.4 916
38 TF n 11 k.5 740
39 TF n 11 k.6 1478
40 TF n 11 k.7 766
41 TR f 11 k.1 1427
42 TR f 11 k.3 1341
43 TR f 11 k.4 1020
44 TR f 11 k.5 1456
45 TR f 11 k.2 1391
46 TR f 11 k.7 1204
47 TR f 11 k.8 1363
48 TR f 11 k.9 644
49 TR f 11 k.6 1293
50 TR f 11 k.10 1155
51 VE <NA> NA k.3 785
52 VE <NA> NA k.4 914
53 VE <NA> NA k.5 1327
54 VE <NA> NA k.6 799
55 VE <NA> NA k.7 1129
56 VE <NA> NA k.8 1411
57 VE <NA> NA k.9 891
58 VE <NA> NA k.10 582
59 VE <NA> NA k.2 1203
60 VE <NA> NA k.1 657