Přidávání, odstraňování, transformace a rekódování proměnných
V této kapitole si na příkladovém souboru ukážeme základní příkazy manipulace proměnných (sloupců) datové tabulky - jejich odstranění, přidávání a také rekódování (kategorizaci).
Vše si ukážeme na datovém souboru Loblolly, který je součástí základní instalace R a obsahuje údaje o výšce (ve stopách) a věku (roky) jehličnanů.
Načteme soubor:
> data(Loblolly)
...a podíváme se na prvních šest řádků:
> head(Loblolly)
height age Seed
1 4.51 3 301
15 10.89 5 301
29 28.72 10 301
43 41.74 15 301
57 52.70 20 301
71 60.92 25 301
Vidíme, že se jedná o datovou tabulku se třemi sloupci.
Přidání a odstranění proměnných datové tabulky
Jako první se rozhodneme přeměnit výšku stromů ze stop na metry. Jedna stopa je 0.3048 m. Vytvoříme tedy další proměnnou, kterou přidáme jednoduše s použitím $:
> Loblolly$height.meters <- Loblolly$height*0.3048
> head(Loblolly)
height age Seed height.meters
1 4.51 3 301 1.374648
15 10.89 5 301 3.319272
29 28.72 10 301 8.753856
43 41.74 15 301 12.722352
57 52.70 20 301 16.062960
71 60.92 25 301 18.568416
alternativně můžeme proměnnou přidat i s pomocí hranatých závorek [ ]:
> Loblolly['height.meters'] <- Loblolly$height*0.3048
Pokud se nechceme v kódu pokaždé odkazovat na název tabulky, můžeme použít funkci transform():
> Loblolly <- transform(Loblolly, height.meters = height*0.3048)
To má význam především chceme-li přidat více proměnných najednou, například chceme-li zároveň přidat i věk v měsících:
> Loblolly <- transform(Loblolly, height.meters = height*0.3048, age.months = age*30.5)
> head(Loblolly)
height age Seed height.meters age.months
1 4.51 3 301 1.374648 91.5
15 10.89 5 301 3.319272 152.5
29 28.72 10 301 8.753856 305.0
43 41.74 15 301 12.722352 457.5
57 52.70 20 301 16.062960 610.0
71 60.92 25 301 18.568416 762.5
Pro odstranění proměnných danému sloupci jednoduše přiřadíme hodnotu NULL, opět s pomocí $ nebo [ ]:
> Loblolly$height.meters <- NULL
> Loblolly['age.months'] <- NULL
> head(Loblolly)
height age Seed
1 4.51 3 301
15 10.89 5 301
29 28.72 10 301
43 41.74 15 301
57 52.70 20 301
71 60.92 25 301
Transformace hodnot proměnných (měníme hodnoty přímo v sloupcích)
Pokud se rozhodneme, že chceme změnit hodnoty v již existujících proměnných, musíme tuto proměnnou nahradit jinými hodnotami. V tomto případě platí všechny výše uvedené příkazy pro tvorbu nové proměnné, pouze místo nové proměnné použijeme již existující název proměnné, kterou chceme změnit:
> Loblolly['height'] <- Loblolly$height*0.3048
Překódování proměnných
V analýze často potřebujeme překódovat kategorické proměnné (změnit hodnoty kategorií, spojit nebo rozdělit některé kategorie), nebo vytvořit kategorie ze spojitých proměnných. Například chceme kategorizovat stromy na vyšší nebo rovno 10 m a nižší 10 m.
Nejjednodušší způsob vytváření kategorií ze spojitých proměnných je pomocí logické podmínky, která vytvoří logický vektor, který přiřadíme nové proměnné:
> Loblolly$height.kat <- Loblolly$height >= 10
Chceme-li více kategorií, řekněme stromy do 5 m, 5-15 m a >15 metrů, použijeme dvě logické podmínky:
> Loblolly$height.kat.tri <- 1 + (Loblolly$height >= 5) + (Loblolly$height > 15)
> head(Loblolly)
height age Seed height.kat height.kat.tri
1 1.374648 3 301 FALSE 1
15 3.319272 5 301 FALSE 1
29 8.753856 10 301 FALSE 2
43 12.722352 15 301 TRUE 2
57 16.062960 20 301 TRUE 3
71 18.568416 25 301 TRUE 3
Můžeme také použít funkci ifelse():
> Loblolly$height.kat.tri.v2 <- ifelse (Loblolly$height < 5 | Loblolly$height > 15, "<5 or >10", "5-10")
...vytvořili jsme dvě skupiny, první skupina obsahuje hodnoty pod 5 a nad 10, druhá hodnoty 5 až 10.
Větší možnosti nabízí funkce recode() z balíku car:
> library(car)
Možnosti rekódování:
1. jednotlivé hodnoty: 3 = 'kontrola'
2. více hodnot: c (1,5) = 5
3. rozsah: 1:18 = 'nezletilý'
4. méně: lo:15 = '<15'
5. méně: 15:hi = '>15'
6. vše ostatní: else = 'not found'
> Loblolly$age.kat <- recode(Loblolly$age, "lo:15='<15'; else='> or equal 15'")