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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。