merge
位於 base
包(package)。 說明
按公共列或行名稱合並兩個 DataFrame ,或執行其他版本的數據庫連接操作。
用法
merge(x, y, ...)
## Default S3 method:
merge(x, y, ...)
## S3 method for class '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, ...)
參數
x, y |
DataFrame 架,或被強製為一個的對象。 |
by, by.x, by.y |
用於合並的列的規格。查看具體信息'。 |
all |
邏輯性; |
all.x |
邏輯性;如果 |
all.y |
邏輯性;類似於 |
sort |
合乎邏輯的。結果應該在 |
suffixes |
長度為 2 的字符向量,指定用於使結果中不用於合並的列名稱唯一的後綴(出現在 |
no.dups |
邏輯表明 |
incomparables |
無法匹配的值。請參閱 |
... |
傳入或傳出方法的參數。 |
細節
merge
是一個通用函數,其主要方法用於數據幀:默認方法將其參數強製為數據幀並調用 "data.frame"
方法。
默認情況下, DataFrame 在具有它們都具有的名稱的列上合並,但可以通過 by.x
和 by.y
給出單獨的列規範。提取兩個 DataFrame 中與指定列匹配的行並將其連接在一起。如果有多個匹配項,則所有可能的匹配項各貢獻一行。有關‘match’的確切含義,請參閱match
。
要合並的列可以通過名稱、編號或邏輯向量指定:名稱"row.names"
或數字0
指定行名稱。如果按名稱指定,則它必須唯一對應於輸入中的命名列。
如果 by
或 by.x
和 by.y
的長度均為 0(長度為零的向量或 NULL
),則結果 r
是 x
和 y
的笛卡爾積,即dim(r) = c(nrow(x)*nrow(y), ncol(x) + ncol(y))
。
如果 all.x
為 true,則 x
的所有不匹配情況也會追加到結果中,並在 y
的相應列中填充 NA
;類似地 all.y
。
如果合並中未使用的 DataFrame 中的列有任何通用名稱,則會附加suffixes
(默認為".x"
和".y"
),以嘗試使結果的名稱唯一。如果這是不可能的,則會拋出錯誤。
如果 by.x
列名稱與 y
之一匹配,並且 no.dups
為 true(默認情況下),則 y 版本也會添加後綴,從而避免結果中出現重複的列名稱。
所使用算法的複雜性與答案的長度成正比。
在 SQL 數據庫術語中,默認值為all = FALSE
給出一個自然連接,一個特殊情況內部聯接。指定all.x = TRUE
給出一個左(外)連接,all.y = TRUE
a 右(外)連接,並且兩者(all = TRUE
) A(完全)外連接。 DBMS 不匹配NULL
記錄,相當於incomparables = NA
在R.
值
一個 DataFrame 。默認情況下,行在公共列上按字典順序排序,但對於 sort = FALSE
來說,順序未指定。這些列是公共列,後跟 x
中的其餘列,然後是 y
中的列。如果匹配涉及行名稱,則在左側添加一個名為Row.names
的額外字符列,並且在所有情況下結果都具有‘automatic’行名稱。
注意
這是為了處理具有類似向量列的數據幀:某些方麵適用於包含矩陣的數據幀,但不是全部。
目前,輸入不接受長向量,因此限製為少於 2^31 行。該限製也適用於 32 位平台的結果。
例子
authors <- data.frame(
## I(*) : use character columns of names to get sensible sort order
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" is missing from authors and appears only here :
merge(authors, books, by.x = "surname", by.y = "name", all = TRUE)
## example of using '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
也可以看看
dendrogram
表示具有 merge
方法的類。
相關用法
- R message 診斷信息
- R mean 算術平均值
- R memlimits 查詢和設置堆大小限製
- R memCompress 內存中壓縮和解壓縮
- R memory.profile 分析 Cons 單元的使用情況
- R mtfrm 匹配輔助函數
- R make.unique 使字符串唯一
- R missing 正式論證有價值嗎?
- R matrix 矩陣
- R matmult 矩陣乘法
- R maxCol 求矩陣中的最大位置
- R mode 對象的(存儲)模式
- R match 價值匹配
- R match.arg 使用部分匹配的參數驗證
- R mat.or.vec 創建矩陣或向量
- R mapply 將函數應用於多個列表或向量參數
- R marginSums 計算表格邊距
- R make.names 命名語法上有效的名稱
- R match.call 參數匹配
- R match.fun 提取名稱指定的函數
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Merge Two Data Frames。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。