Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Datové tabulky a seznamy Funkce pro manipulaci s datovými tabulkami a seznamy

Logo Matematická biologie

Funkce pro manipulaci s datovými tabulkami a seznamy

Přidání dalších sloupců

Prvním způsobem, jak do datové tabulky přidat nový sloupec s hodnotami, je příkaz tvaru

datová_tabulka$nazev_noveho_sloupce <- hodnoty.

Druhým způsobem je provést přiřazení pomocí funkce data.frame() (bez přiřazení zobrazuje nové hodnoty pouze dočasně).

> knihy <- data.frame(nazev=c("Dekameron", "Maj", "Temno", "Bidnici",  "Babicka"),

+ autor=c("Boccaccio", "Macha", "Jirasek", "Hugo", "Nemcova")))

 
nazev
autor
1
Dekameron
Boccaccio
2
Maj
Macha
3
Temno
Jirasek
4
Bidnici
Hugo
5
Babicka
Nemcova
> knihy$pocet <- c(3, 6, 4, 3, 5)
> knihy
 
nazev
autor
pocet
1
Dekameron
Boccaccio
3
2
Maj
Macha
6
3
Temno
Jirasek
4
4
Bidnici
Hugo
3
5
Babicka
Nemcova
5

> (knihy <- data.frame(knihy, k_dispozici=c(F, F, T, F, T)))

 
nazev
autor
pocet
k_dispozici
1
 Dekameron
Boccaccio
3
FALSE
2
Maj
Macha
6
FALSE
3
Temno
Jirasek
4
TRUE
4
Bidnici
Hugo
3
FALSE
5
Babicka
Nemcova
5
TRUE

Funkce transform() pouze tiskne aktuální datovou tabulku, nepřidává nastálo novou proměnnou (v opačném případě musíme provést přiřazení).

> transform(knihy, rok=c(1971, 1997, 1983, 2003, 1992))    přidá sloupec rok s danými hodnotami, proměnná knihy ovšem zůstane nezměněna
 
nazev
autor
pocet
k_dispozici
rok
1
 Dekameron
Boccaccio
3
FALSE
1971
2
Maj
Macha
6
FALSE
1997
3
Temno
Jirasek
4
TRUE
1983
4
Bidnici
Hugo
3
FALSE
2003
5
Babicka
Nemcova
5
TRUE
1992
 

Pro přidání dalších složek do seznamu lze pomocí operátoru přiřazení tvaru seznam$nova_slozka <- objekt nebo seznam[["nova_slozka"]] <- objekt.

> (vyzkum <- list(n=28, lokalita="Brno"))

$n
[1]    28
 
$lokalita
[1]    "Brno"
> vyzkum$obdobi <- 2004:2012
> vyzkum[["jakost"]] <- factor(c(0, 1, 1, 1, 0, 0, 1, 0, 1, 1), labels= c("1", "2"))
> vyzkum
$n
[1]    28
 
$lokalita
[1]    "Brno"
 
$obdobi
[1]    2004    2005    2006    2007    2008    2009    2010    2011    2012
 
$jakost
[1]    1    2    2    2    1    1    2    1    2    2
Levels: 1 2

Odstraňování řádků a sloupců

Každý sloupec můžeme z datové tabulky odstranit použitím operátoru $ nebo [] nastavením na hodnotu NULL.

> knihy$pocet <- NULL    analogický příkaz: knihy ["pocet"] <- NULL. O tom, že sloupce byly opravdu odstraněny, se můžeme přesvědčit funkcí names().
> names(knihy)}
[1]    "nazev"    "autor"    "k_dispozici"

K odstranění řádků můžeme použít i operátor [,].

> (knihy <- knihy[1:3, c("nazev", "k_dispozici")])

 
nazev
k_dispozici
1
 Dekameron
FALSE
2
Maj
FALSE
3
Temno
TRUE

Ke sloučení datových tabulek můžeme použít funkce cbind() nebo rbind(), které je sloučí po sloupcích nebo řádcích. Při použití funkce cbind() musí mít přidávané sloupce stejný počet řádků jako v již existující datové tabulce. Rovněž je vhodné se přesvědčit, že přidávané sloupce mají stejné pořadí řádků. Při použití funkce rbind() je třeba dodržovat stejný počet sloupců a jejich shodné názvy.

Alternativou k funkcím cbind() a rbind() může být funkce
merge(x, y, by, by.x, by.y, all, all.x, all.y)    sloučí datové tabulky x a y

by, by.x, by.y    specifikují ty názvy sloupců, podle kterých mají být tabulky sloučeny. V případě stejného názvu sloupců použijeme argument by. Jsou-li názvy sloupců ke sloučení různé, specifikujeme je pomocí argumentů by.x a by.y. V případě více podmínek na spojení podmínky uvádíme ve formě vektoru typu řetězec.

all, all.x a all.y    specifikace těch řádků, které se mají objevit na výstupu. Implicitní nastavení all=FALSE vrací pouze řádky z průniku obou tabulek, all=TRUE vrací řádky ze sjednocení obou tabulek. all.x=TRUE vrací všechny řádky tabulky x, analogicky je tomu u all.y=TRUE.

Poznámka. Při použití některého z argumentů all=TRUE, all.x=TRUE nebo all.y=TRUE mají „volná“ místa, která vznikla spojením, hodnotu NA.

> (tab1 <- data.frame(auto=c("fiat", "opel", "skoda", "bmw"), barva= c("seda", "cervena",
+ "cerna", "modra"), rok=c(2003, 1999, 2008, 2004)))
 
auto
barva
rok
1
fiat
seda
2003
2
opel
cervena
1993
3
skoda
cerna
2008
4
bmw
modra
2004
> (tab2 <- data.frame(znacka=c("saab", "bmw", "audi"), majitel=c("muz", "zena", "zena")))
 
znacka
majitel
1
saab
muz
2
bmw
zena
3
audi
zena
> merge(tab1, tab2)    protože tabulky neobsahují stejný název sloupce, podle kterého by se sloučení mělo řídit, R vytvoří kartézský součin obou tabulek (tzn. ke každému řádku tab1 se připojí každý řádek tab2)
 
auto
barva
rok
znacka
majitel
1
fiat
seda
2003
saab
muz
2
opel
cervena
1999
saab
muz
3
skoda
cerna
2008
saab
muz
4
bmw
modra
2004
saab
muz
5
fiat
seda
2003
bmw
zena
6
opel
cervena
1999
bmw
zena
7
skoda
cerna
2008
bmw
zena
8
bmw
modra
2004
bmw
zena
9
fiat
seda
2003
audi
zena
10
opel
cervena
1999
audi
zena
11
skoda
cerna
2008
audi
zena
12
bmw
modra
2004
audi
ze
 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity