Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyCvičebnice jazyka R Dokumentace k základním funkcím merge

merge

Sloučit dva datové rámce

merge {base} Dokumentace R v češtině

Popis

Sloučit dva datové rámce pomocí společných sloupců nebo názvů řádků nebo provádět jiné verze operací spojování databáze.

Použití

merge(x, y, ...)

## Výchozí S3 metoda:
merge(x, y, ...)

## S3 metoda pro třídu 'data.frame'
merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
incomparables = NULL, ...)

Argumenty

x, y

datové rámce nebo objekty, které mají být konvertovány na jeden.

by, by.x, by.y

specifikace sloupců používaných pro sloučení. Viz ‘Detaily’.

all

logical; all = L je zkratka pro all.x = L a all.y = L, kde L je buď TRUE nebo FALSE.

all.x

logical; pokud je TRUE, pak další řádky budou přidány k výstupu, jeden pro každý řádek v x, který nemá odpovídající řádek v y. Tyto řádky budou mít NAs v těch sloupcích, které jsou obvykle vyplněny hodnotami z y. Výchozí hodnota je FALSE, , takže do výstupu jsou zahrnuty pouze řádky s daty z x i y.

all.y

logical; analogické k all.x.

sort

logical. Má se výsledek na by seřadit podle sloupců?

suffixes

znakový vektor délky 2, který určuje přípony, které mají být použity k vytvoření jedinečných názvů sloupců ve výsledku, které se nepoužívají pro sloučení (objevující sa v by atd.).

no.dups

proměnná typu logical indikující, že suffixes jsou připojeny ve více případech, aby se zabránilo duplicitním názvům sloupců ve výsledku. Toto bylo implicitně false před verzí R 3.5.0.

incomparables

hodnoty, které nelze spárovat. Viz match. To je určeno pro sloučení na jednom sloupci, takže to jsou neporovnatelné hodnoty tohoto sloupce.

...

argumenty, které mají být předány metodám nebo z nich.

Detaily

merge je generická funkce, jejíž hlavní metodoa je pro datové rámce: výchozí metoda konvertuje své argumenty na datové rámce a volá metodu "data.frame".

Ve výchozím nastavení jsou datové rámce sloučeny na sloupcích se názvy, které mají oba, ale samostatné specifikace sloupců mohou být zadány pomocí by.x a by.y. Řádky ve dvou datových rámcích, které odpovídají specifikovaným sloupcům, jsou extrahovány a spojeny dohromady. Pokud existuje více než jedna shoda, všechny možné shody přispívají vždy jedním řádkem. Pro přesný význam ‘shody’, viz match.

Sloupce ke sloučení lze zadat podle názvu, čísla nebo vektoru typu logical: název "row.names" nebo číslo 0 specifikuje názvy řádků. Pokud je zadáno pomocí názvů, musí jednoznačně a nezaměnitelně odpovídat pojmenovanému sloupci na vstupu.

Pokud by nebo obojí by.x i by.y májí délku 0 (vektor s délkou nula nebo NULL), výsledek, r, je karteziánský produkt x a y, tzn., dim(r) = c(nrow(x)*nrow(y), ncol(x) + ncol(y)).

Pokud je all.x true, všechny případy x beze shody jsou připojeny k výsledku také, s vyplněním NA v odpovídajících sloupcích y; analogicky pro all.y.

Pokud sloupce v datových rámcích, které se nepoužívají při slučování, mají nějaké společné názvy, budou tyto mít přípony (".x" a ".y" ve výchozím nastavení) připojené, aby se pokusily vytvořit jedinečné názvy výsledku. Není-li to možné, dojde k chybě.

Pokud název sloupce by.x odpovídá jednomu z y, a pokud je no.dups true (jako výchozí hodnota), verze y také dostane příponu, aby se vyhlo se duplicitním názvům sloupců ve výsledku.

Složitost použitého algoritmu je úměrná délce odpovědi.

V terminologii databáze SQL výchozí hodnota all = FALSE dává přirozené spojení, zvláštní případ vnitřního spojení. Zadání all.x = TRUE dává levé (vnější) spojení, all.y = TRUE pravé (vnější) spojení, a oba (all = TRUE) a (plné) vnější spojení. DBMS neodpovídají záznamům NULL, tak jako incomparables = NA v R.

Hodnota

Datový rámec. Řádky jsou ve výchozím nastavení lexikograficky seřazeny na společných sloupcích, ale pro sort = FALSE jsou v neurčenom pořadí. Sloupce jsou společné sloupce, po kterých následují zbývající sloupce v x a pak ty v y. Pokud shoda obsahuje názvy řádků, přidá se nalevo sloupec s dalšími znaky nazvaný Row.names, a ve všech případech má výsledek ‘automatické’ názvy řádků.

Poznámka

Toto je určeno pro práci s datovými rámci s vektorovými sloupci: některé aspekty pracují s datovými rámci obsahujícími matice, ale ne všechny.

V současnosti nejsou pro vstupy přijímány dlouhé vektory, a jsou tedy omezeny na méně než 2^31 řádků. Toto omezení platí také pro výsledek pro 32bitové platformy.

Viz také

data.frame, by, cbind.

dendrogram pro třídu, která má metodu merge.

Příklady

authors <- data.frame(
## I(*) : použijte sloupce znaků názvů pro získání rozumného řazení
surname = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),
nationality = c("US", "Australia", "US", "UK", "Australia"),
deceased = c("yes", rep("no", 4)))
authorN <- within(authors, { name <- surname; rm(surname) })
books <- data.frame(
name = I(c("Tukey", "Venables", "Tierney",
"Ripley", "Ripley", "McNeil", "R Core")),
title = c("Exploratory Data Analysis",
"Modern Applied Statistics ...",
"LISP-STAT",
"Spatial Statistics", "Stochastic Simulation",
"Interactive Data Analysis",
"An Introduction to R"),
other.author = c(NA, "Ripley", NA, NA, NA, NA,
"Venables & Smith"))

(m0 <- merge(authorN, books))
(m1 <- merge(authors, books, by.x = "surname", by.y = "name"))
m2 <- merge(books, authors, by.x = "name", by.y = "surname")
stopifnot(exprs = {
identical(m0, m2[, names(m0)])
as.character(m1[, 1]) == as.character(m2[, 1])
all.equal(m1[, -1], m2[, -1][ names(m1)[-1] ])
identical(dim(merge(m1, m2, by = NULL)),
c(nrow(m1)*nrow(m2), ncol(m1)+ncol(m2)))
})

## "R core" z autorů chybí a objevuje se pouze zde:
merge(authors, books, by.x = "surname", by.y = "name", all = TRUE)

## příklad použití 'incomparables'
x <- data.frame(k1 = c(NA,NA,3,4,5), k2 = c(1,NA,NA,4,5), data = 1:5)
y <- data.frame(k1 = c(NA,2,NA,4,5), k2 = c(NA,NA,3,4,5), data = 1:5)
merge(x, y, by = c("k1","k2")) # NA's match
merge(x, y, by = "k1") # NA's match, so 6 rows
merge(x, y, by = "k2", incomparables = NA) # 2 rows

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