1. feladat. Faktor létrehozása.
Hozzuk létre a 10 személy dohányzási szokására vonatkozó faktort:
"nem dohányzik", "nem dohányzik", "sokat dohányzik", "keveset dohányzik", "keveset dohányzik",
"sokat dohányzik", "nem dohányzik", "keveset dohányzik", "sokat dohányzik", "sokat dohányzik".
# numerikus vektor létrehozása: 1-nem dohányzik; 2-keveset dohányzik; 3-sokat dohányzik
d.sz <- c(1, 1, 3, 2, 2, 3, 1, 2, 3, 3)
d.sz <- factor(d.sz, labels=c("nem dohányzik", "keveset dohányzik", "sokat dohányzik"))
d.sz; typeof(d.sz); attributes(d.sz)
[1] nem dohányzik nem dohányzik sokat dohányzik keveset dohányzik keveset dohányzik
[6] sokat dohányzik nem dohányzik keveset dohányzik sokat dohányzik sokat dohányzik
Levels: nem dohányzik keveset dohányzik sokat dohányzik
[1] "integer"
$levels
[1] "nem dohányzik" "keveset dohányzik" "sokat dohányzik"
$class
[1] "factor"
# numerikus vektor létrehozása: 1-nem dohányzik; 2-keveset dohányzik; 3-sokat dohányzik
d.sz <- c("nem dohányzik", "nem dohányzik", "sokat dohányzik", "keveset dohányzik",
"keveset dohányzik", "sokat dohányzik", "nem dohányzik", "keveset dohányzik",
"sokat dohányzik", "sokat dohányzik")
d.sz <- factor(d.sz, levels=c("nem dohányzik", "keveset dohányzik", "sokat dohányzik"))
d.sz; typeof(d.sz); attributes(d.sz)
[1] nem dohányzik nem dohányzik sokat dohányzik keveset dohányzik keveset dohányzik
[6] sokat dohányzik nem dohányzik keveset dohányzik sokat dohányzik sokat dohányzik
Levels: nem dohányzik keveset dohányzik sokat dohányzik
[1] "integer"
$levels
[1] "nem dohányzik" "keveset dohányzik" "sokat dohányzik"
$class
[1] "factor"
2. feladat. Faktor létrehozása.
Hozzuk létre a 10 személy dohányzási szokására vonatkozó faktort:
"nem dohányzik", "nem dohányzik", "nem dohányzik", "nem dohányzik", "keveset dohányzik", "keveset dohányzik", "keveset dohányzik", "keveset dohányzik", "sokat dohányzik", "sokat dohányzik". Figyeljük meg, hogy ez a vektor ismétlődő értékeket tartalmaz!
d.sz <- factor(rep(c("nem dohányzik", "keveset dohányzik", "sokat dohányzik"),
times=c(4, 4, 2)),
levels=c("nem dohányzik", "keveset dohányzik", "sokat dohányzik"))
d.sz; typeof(d.sz); attributes(d.sz)
[1] nem dohányzik nem dohányzik nem dohányzik nem dohányzik keveset dohányzik
[6] keveset dohányzik keveset dohányzik keveset dohányzik sokat dohányzik sokat dohányzik
Levels: nem dohányzik keveset dohányzik sokat dohányzik
[1] "integer"
$levels
[1] "nem dohányzik" "keveset dohányzik" "sokat dohányzik"
$class
[1] "factor"
3. feladat. Faktorszintek sorrendje.
AMASS
csomagsurvey
adattáblájában azExer
faktor szintjeit állítsuk a helyes sorrendbe!
data(survey, package = "MASS")
survey$Exer; typeof(survey$Exer); length(survey$Exer); attributes(survey$Exer) # tájékozódás
[1] Some None None None Some Some Freq Freq Some Some Freq Freq Some Some Some Freq Freq Some Some
[20] Freq Freq Freq Freq Some Some Some Some Freq Freq Some None Freq Freq Some Some Freq Some Freq
[39] Some Freq Some Some Some Some Freq Freq Freq None Some None Freq Freq Some Freq Freq Freq None
[58] Freq Freq Freq Freq Freq Freq None Freq Freq Freq Freq Some None Freq Freq Some Freq Some Freq
[77] Some Freq Some Freq Some Freq Freq Some Freq Some Some Freq Freq Some Some Some Some Some Freq
[96] Some Freq Freq Freq Freq Some None Some Freq Some Some Freq Freq Freq Some Freq None Freq Freq
[115] Freq None Some Some Some Freq Freq Freq Freq Freq Freq Freq Freq Freq Freq Some Freq Some Some
[134] Freq Some Some Freq Freq Freq None Some None Freq Some Freq Some Freq Freq Freq Freq Freq Freq
[153] Some Freq None Freq Freq Some None Freq None Some Some Freq Some Some Some Some Freq Freq Some
[172] Some Some Freq Freq Freq Freq Freq Freq Some Freq Freq Some Freq Some Some Some None Freq Freq
[191] Some Some None Some None Some Freq Freq Some Some Some Freq Some None Some Freq Some Some None
[210] Freq Some Some Freq Some Some Some None Freq Freq Freq None Freq Some Freq Some Some Some Freq
[229] Freq Freq Some Some Some Some Some Some Freq
Levels: Freq None Some
[1] "integer"
[1] 237
$levels
[1] "Freq" "None" "Some"
$class
[1] "factor"
# szintek sorrendjének beállítása
survey$Exer <- factor(survey$Exer, levels=c("None", "Some", "Freq"))
survey$Exer; typeof(survey$Exer); length(survey$Exer); attributes(survey$Exer)
[1] Some None None None Some Some Freq Freq Some Some Freq Freq Some Some Some Freq Freq Some Some
[20] Freq Freq Freq Freq Some Some Some Some Freq Freq Some None Freq Freq Some Some Freq Some Freq
[39] Some Freq Some Some Some Some Freq Freq Freq None Some None Freq Freq Some Freq Freq Freq None
[58] Freq Freq Freq Freq Freq Freq None Freq Freq Freq Freq Some None Freq Freq Some Freq Some Freq
[77] Some Freq Some Freq Some Freq Freq Some Freq Some Some Freq Freq Some Some Some Some Some Freq
[96] Some Freq Freq Freq Freq Some None Some Freq Some Some Freq Freq Freq Some Freq None Freq Freq
[115] Freq None Some Some Some Freq Freq Freq Freq Freq Freq Freq Freq Freq Freq Some Freq Some Some
[134] Freq Some Some Freq Freq Freq None Some None Freq Some Freq Some Freq Freq Freq Freq Freq Freq
[153] Some Freq None Freq Freq Some None Freq None Some Some Freq Some Some Some Some Freq Freq Some
[172] Some Some Freq Freq Freq Freq Freq Freq Some Freq Freq Some Freq Some Some Some None Freq Freq
[191] Some Some None Some None Some Freq Freq Some Some Some Freq Some None Some Freq Some Some None
[210] Freq Some Some Freq Some Some Some None Freq Freq Freq None Freq Some Freq Some Some Some Freq
[229] Freq Freq Some Some Some Some Some Some Freq
Levels: None Some Freq
[1] "integer"
[1] 237
$levels
[1] "None" "Some" "Freq"
$class
[1] "factor"
4. feladat. Faktorszintek neve.
AMASS
csomagsurvey
adattáblájában azExer
faktor értékéiet nevezzük át a magyar megfelelőkre!
data(survey, package = "MASS")
survey$Exer; typeof(survey$Exer); length(survey$Exer); attributes(survey$Exer) # tájékozódás
[1] Some None None None Some Some Freq Freq Some Some Freq Freq Some Some Some Freq Freq Some Some
[20] Freq Freq Freq Freq Some Some Some Some Freq Freq Some None Freq Freq Some Some Freq Some Freq
[39] Some Freq Some Some Some Some Freq Freq Freq None Some None Freq Freq Some Freq Freq Freq None
[58] Freq Freq Freq Freq Freq Freq None Freq Freq Freq Freq Some None Freq Freq Some Freq Some Freq
[77] Some Freq Some Freq Some Freq Freq Some Freq Some Some Freq Freq Some Some Some Some Some Freq
[96] Some Freq Freq Freq Freq Some None Some Freq Some Some Freq Freq Freq Some Freq None Freq Freq
[115] Freq None Some Some Some Freq Freq Freq Freq Freq Freq Freq Freq Freq Freq Some Freq Some Some
[134] Freq Some Some Freq Freq Freq None Some None Freq Some Freq Some Freq Freq Freq Freq Freq Freq
[153] Some Freq None Freq Freq Some None Freq None Some Some Freq Some Some Some Some Freq Freq Some
[172] Some Some Freq Freq Freq Freq Freq Freq Some Freq Freq Some Freq Some Some Some None Freq Freq
[191] Some Some None Some None Some Freq Freq Some Some Some Freq Some None Some Freq Some Some None
[210] Freq Some Some Freq Some Some Some None Freq Freq Freq None Freq Some Freq Some Some Some Freq
[229] Freq Freq Some Some Some Some Some Some Freq
Levels: None Some Freq
[1] "integer"
[1] 237
$levels
[1] "None" "Some" "Freq"
$class
[1] "factor"
levels(survey$Exer) <- c("Gyakran", "Soha", "Néha") # faktorszintek átnevezése
survey$Exer; typeof(survey$Exer); length(survey$Exer); attributes(survey$Exer)
[1] Soha Gyakran Gyakran Gyakran Soha Soha Néha Néha Soha Soha Néha
[12] Néha Soha Soha Soha Néha Néha Soha Soha Néha Néha Néha
[23] Néha Soha Soha Soha Soha Néha Néha Soha Gyakran Néha Néha
[34] Soha Soha Néha Soha Néha Soha Néha Soha Soha Soha Soha
[45] Néha Néha Néha Gyakran Soha Gyakran Néha Néha Soha Néha Néha
[56] Néha Gyakran Néha Néha Néha Néha Néha Néha Gyakran Néha Néha
[67] Néha Néha Soha Gyakran Néha Néha Soha Néha Soha Néha Soha
[78] Néha Soha Néha Soha Néha Néha Soha Néha Soha Soha Néha
[89] Néha Soha Soha Soha Soha Soha Néha Soha Néha Néha Néha
[100] Néha Soha Gyakran Soha Néha Soha Soha Néha Néha Néha Soha
[111] Néha Gyakran Néha Néha Néha Gyakran Soha Soha Soha Néha Néha
[122] Néha Néha Néha Néha Néha Néha Néha Néha Soha Néha Soha
[133] Soha Néha Soha Soha Néha Néha Néha Gyakran Soha Gyakran Néha
[144] Soha Néha Soha Néha Néha Néha Néha Néha Néha Soha Néha
[155] Gyakran Néha Néha Soha Gyakran Néha Gyakran Soha Soha Néha Soha
[166] Soha Soha Soha Néha Néha Soha Soha Soha Néha Néha Néha
[177] Néha Néha Néha Soha Néha Néha Soha Néha Soha Soha Soha
[188] Gyakran Néha Néha Soha Soha Gyakran Soha Gyakran Soha Néha Néha
[199] Soha Soha Soha Néha Soha Gyakran Soha Néha Soha Soha Gyakran
[210] Néha Soha Soha Néha Soha Soha Soha Gyakran Néha Néha Néha
[221] Gyakran Néha Soha Néha Soha Soha Soha Néha Néha Néha Soha
[232] Soha Soha Soha Soha Soha Néha
Levels: Gyakran Soha Néha
[1] "integer"
[1] 237
$levels
[1] "Gyakran" "Soha" "Néha"
$class
[1] "factor"
5. feladat. Faktorszintek beállítása.
Öt diák nemét szeretnénk tárolni a "fiú" és "lány" címkék segítségével. Az öt véletlenszerűen választott diák neme: "fiú", "fiú", "fiú", "fiú", "fiú". Hozzuk létre a faktort egy karakteres vektor egyszerű konverziójával. Próbáljuk átírni az első személy nemét "lány"-ra. Hogyan kell létrehozni a faktort, hogy ezt megtehessük?
nem <- c("fiú", "fiú", "fiú", "fiú", "fiú")
nem <- factor(nem)
nem; typeof(nem); length(nem); attributes(nem) # tájékozódás
[1] fiú fiú fiú fiú fiú
Levels: fiú
[1] "integer"
[1] 5
$levels
[1] "fiú"
$class
[1] "factor"
# az 1. elem értékének megváltoztatása
nem[1] <- "lány"
Warning in `[<-.factor`(`*tmp*`, 1, value = "lány"): invalid factor level, NA generated
nem; typeof(nem); length(nem); attributes(nem) # tájékozódás
[1] <NA> fiú fiú fiú fiú
Levels: fiú
[1] "integer"
[1] 5
$levels
[1] "fiú"
$class
[1] "factor"
# megoldás
nem <- c("fiú", "fiú", "fiú", "fiú", "fiú")
nem <- factor(nem, levels=c("fiú", "lány")) # 2 szintű faktor létrehozása
nem; typeof(nem); length(nem); attributes(nem)
[1] fiú fiú fiú fiú fiú
Levels: fiú lány
[1] "integer"
[1] 5
$levels
[1] "fiú" "lány"
$class
[1] "factor"
# az 1. elem értékének sikeres megváltoztatása
nem[1] <- "lány"
nem; typeof(nem); length(nem); attributes(nem)
[1] lány fiú fiú fiú fiú
Levels: fiú lány
[1] "integer"
[1] 5
$levels
[1] "fiú" "lány"
$class
[1] "factor"
6. feladat. Nem használt faktorszintek eldobása.
Adjunk példát a nem használt faktorszintek eldobására adroplevels()
függvény segítségével!
A <- c("a", "a", "b", "b", "c")
B <- c(12, 13, 14, 15, 21)
d <- data.frame(A, B) # adattábla létrehozása
d
A B
1 a 12
2 a 13
3 b 14
4 b 15
5 c 21
d$A; typeof(d$A); length(d$A); attributes(d$A) # tájékozódás
[1] a a b b c
Levels: a b c
[1] "integer"
[1] 5
$levels
[1] "a" "b" "c"
$class
[1] "factor"
d.2 <- d[ d$A!="a", ] # szűrés
d.2
A B
3 b 14
4 b 15
5 c 21
d.2$A <- droplevels(d.2$A) # nem használt faktorszintek eldobása (faktorszintű megoldás)
d.2$A; typeof(d.2$A); length(d.2$A); attributes(d.2$A)
[1] b b c
Levels: b c
[1] "integer"
[1] 3
$levels
[1] "b" "c"
$class
[1] "factor"
d.2 <- d[ d$A!="a", ] # szűrés
d.2
A B
3 b 14
4 b 15
5 c 21
d.2 <- droplevels(d.2) # nem használt faktorszintek eldobása (adattábla szintű megoldás)
d.2$A; typeof(d.2$A); length(d.2$A); attributes(d.2$A)
[1] b b c
Levels: b c
[1] "integer"
[1] 3
$levels
[1] "b" "c"
$class
[1] "factor"