
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")))
> knihy$pocet <- c(3, 6, 4, 3, 5)
> knihy
> (knihy <- data.frame(knihy, k_dispozici=c(F, F, T, F, T)))
|
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
|
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")])
|
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)))
> (tab2 <- data.frame(znacka=c("saab", "bmw", "audi"), majitel=c("muz", "zena", "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)
|