
Slučování a řazení
Slučování
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)
> merge(tab1, tab2, by.x="auto", by.y="znacka") spojení na základě výskytu bmw v obou sloupcích auto i znacka
> merge(tab1, tab2, by.x="auto", by.y="znacka", all.x=T) argumentall.x=T zajistil, aby výstup obsahoval všechny hodnoty z tab1
|
Řazení
K seřazení tabulek dat se používá funkce order(), která vrací vektor indexů vzestupně (implicitně) nebo sestupně uspořádaných prvků. Pro více informací o funkci order viz odstavec Matematické funkce.
> knihy
> knihy[order(knihy$k_dispozici, knihy$nazev),] seřazuje podle sloupce k_dispozici, v případě vícenásobných hodnot řadí podle sloupce nazev
> knihy[order(knihy$k_dispozici, -knihy$pocet),] pokud některý ze sloupců tabulky tvoří numerický vektor, pro sestupné uspořádání tohoto sloupce můžeme použít operátoru -. Rovněž si můžeme všimnout, že v případě nejednoznačných podmínek na seřazení (řádek č. 1 a 4) dostává přednost řádek s nižším pořadovým číslem, u názvů řádků se postupuje podle abecedního uspořádání.
|