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