Väärtuste dekodeerimine; kombineerimine; esitusjärjekorra muutmine



sugu    sugu2
   1    naine
   2    mees
   1    naine
   1    naine
  ...    ...

   
Dekodeerimine

Sageli on tunnuse väärtused esitatud andmebaasis kodeeritud kujul, näiteks tunnus sugu võib olla kodeeritud järgmiselt:

  1 - naine
  2 - mees
Vahel aga tahame tunnuse väärtused dekodeerida tagasi pikemale ja sisukamale kujule, tahaksime näha väärtuste 1 ja 2 asemel taas väärtuseid naine ja mees. Kuidas tunnuse väärtuseid välja näidatakse, seda saab muuta käsuga factor. Näiteks järgmine käsk loob uue tunnuse sugu2 mille väärtused võetakse olemasolevast tunnusest sugu. Aga tunnuse sugu2 väärtuste kuvamisel asendatakse väärtus 1 väärtusega naine ja väärtus 2 väärtusega mees (olemasolevad väärtused loetletakse käsusõna levels taga, kuidas neid väärtuseid dekodeerida, see on kirjas käsusõna labels taga):

sugu2=factor(sugu, levels=c(1,2), labels=c("naine", "mees"))

Kasutades vastloodud tunnust sugu2 on võimalik saada näiteks sisukamaid sagedustabeleid või jooniseid:

table(sugu)           table(sugu2)
 
sugu                  sugu2
  1   2
              naine  mees
512 149
                512   149


HOIATUS!!!
Kui tunnus sisaldada veel mõnda väärtust (või koodi) mida pole aga loetletud levels= käsusõna taga antud loendis, siis selliseid mittemainitud väärtuseid või koode käsitletakse edaspidistes analüüsides automaatselt kui puuduvaid väärtuseid!!! Näiteks kui mõnel tudengil oleks (kogemata?) tunnuse sugu väärtuseks kirjutatud väärtus "m", siis vastavat väärtust näidatakse välja tunnusele sugu tehtud sagedustabelis kolmanda võimalusena, kuid tunnusele sugu2 tehtud sagedustabelis vastavat väärtust enam ei esine (sest nendel tudengitel, kellel tunnuse sugu väärtuseks on märgitud "m" kirjutatakse tunnuse sugu2 väärtuseks puuduv väärtus).

Väärtuste esitusjärjekorra muutmine;
andmestikus mitteesinenud väärtuste lisamine sagedustabelisse või joonisele

Tunnuse väärtuseid näidatakse sagedustabelites ja joonistel selles järjekorras, nagu nad on järjestatud factor-käsu levels=-parameetri taga antud loendis. Samuti tekitatakse sagedustabelisse rida iga levels=-parameetris kirjas oleva väärtuse jaoks, ükskõik kas neid väärtuseid eines antud andmestikus või mitte.

Vaatame järgmist näidet. Tunnus perekonnaseis on kodeeritud järgmiselt:

  1 - vallaline
  2 - abielus
  3 - vabaabielus
  4 - lahutatud
  5 - lesk
Vaata järgmiseid käske ja nende käskude tulemusena saadud väljundit:

table(perekonnaseis)

Tulemus:

      perekonnaseis
        1   2   3   4 
      579  17  61   4 

Dekodeerime tunnuse perekonnaseis väärtused. Märka, et sagedustabelisse lisandub üks täiendav veerg (lesk, vastab kodeeritud väärtusele 5)

perekonnaseisF=factor(perekonnaseis, levels=c(1,2,3,4,5),
   labels=c("vallaline", "abielus", "vabaabielus", "lahutatud", "lesk"))

 
table(perekonnaseisF)

Tulemus:

      perekonnaseisF
        vallaline     abielus vabaabielus   lahutatud        lesk 
              579          17          61           4           0
Muudame väärtuste järjekorda muutes levels=-parameetriga etteantavate väärtuste järjekorda (ja muidugi peame siis muutma ka väärtustele vastavate märgendite järjekorda, mis on määratud labels=-lisaparameetriga). Kui teeme nüüd sagedustabeli vastloodud faktortunnusele perekonnaseisF2, siis on võrreldes eelmise näitega vahetunud väärtuste "vabaabielus" ja "abielus" järjekord.

perekonnaseisF2=factor(perekonnaseis, levels=c(1,3,2,4,5),
   labels=c("vallaline", "vabaabielus", "abielus", "lahutatud", "lesk"))

 
table(perekonnaseisF2)

Tulemus:

      perekonnaseisF2
        vallaline vabaabielus     abielus   lahutatud        lesk 
              579          61          17           4           0

Ka olemasoleva faktortunnuse väärtuste järjekorda võime muuta, sellisel juhul pole enam tarvidust labels= lisaparameetri järele:

proov=factor(perekonnaseisF,
   levels=c("lesk", "abielus", "vallaline", "lahutatud", "vabaabielus"))

 
table(proov)

Tulemus:

      proov
             lesk     abielus   vallaline   lahutatud vabaabielus 
                0          17         579           4          61

Sama väärtuste järjekorda kasutatakse ka graafikute joonistamisel. Võrdle näiteks järgmiste käskude tulemust:

barplot(table(perekonnaseis))
barplot(table(perekonnaseisF))
barplot(table(perekonnaseisF2))

Väärtuste kombineerimine

Kui esialgne tunnus on kodeeritud numbriline tunnus (või nn tavatekstitunnus), siis on väärtuste kombineerimine äärmiselt lihtne. Loome näiteks uue tunnuse pere, kus kombineerime väärtused 2 (abielus) ja 3 (vabaabielus) kokku kategooriaks 2. Selleks muudame kõigil nendel tudengitel, kellel on tunnuse perekonnaseis väärtuseks 3 tunnuse väärtuse 2-ks:

pere=perekonnaseis
table(pere)

Tulemus:

    pere
      1   2   3   4 
    579  17  61   4 

Muudame kõik 3-d (vabaabielus) kahtedeks (abielus)

pere[pere==3]=2
table(pere)

Tulemus:

    pere
      1   2   4 
    579  78   4 

Kui algne tunnus on juba faktortunnus, siis on kategooriate liitmine sammu võrra keerulisem. Esmalt muudame kõik väärtused "vabaabielus" väärtusteks "abielus", seejärel peame aga eemaldama väärtuse "vabaabielus" ka võimalike väärtuste nimekirjast:

pereF=perekonnaseisF
pereF[pereF=="vabaabielus"]="abielus"
table(pereF)

Tulemus (esailgu näidatakse meile ikka veel kategooriat "vabaabielus"):

  pereF
    vallaline     abielus vabaabielus   lahutatud        lesk 
          579          78           0           4           0 
Variant A:
Eemaldame kõik andmestikus mitteesinenud väärtused võimalike väärtuste nimekirjast:

pereF=factor(pereF)
table(pereF)

Tulemus (kadunud on nii "vabaabielus" kui ka "lesk"):

   pereF
   vallaline   abielus lahutatud 
         579        78         4 
Variant B
Loetleme üles kõik tunnuse pereF lubatud väärtused:

pereF=factor(pereF, levels=c("vallaline", "abielus", "lahutatud", "lesk"))
table(pereF)

Tulemus (kadunud on "vabaabielus" kuid vastusevariant "lesk" on jäänud sagedustabelisse alles):

   pereF
   vallaline   abielus lahutatud      lesk 
         579        78         4         0