Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Úprava a transformace dat v R Přidávání, odstraňování a transformace a rekódování proměnných

Logo Matematická biologie

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'")

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity