首页 > 解决方案 > R merge() rbinds 而不是合并

问题描述

我在 R 中遇到了merge()我无法理解的行为。它似乎合并或 rbinds 数据帧,具体取决于列中是否有一个或多个唯一值。

a1 <- data.frame (A = c (1, 1))
a2 <- data.frame (A = c (1, 2))

# > merge (a1, a1)
#   A
# 1 1
# 2 1
# 3 1
# 4 1

# > merge (a2, a2)
#   A
# 1 1
# 2 2

后者是我在这两种情况下所期望和想要的结果。我还尝试了不止一列,以及字符而不是数字,结果是相同的:多个值导致合并,一个唯一值导致 rbinding。

标签: rdataframemergerbind

解决方案


在第一种情况下,每行匹配两行,因此输出中有 2x2=4 行,在第二种情况下,每行匹配一行,因此输出中有 2 行。

要匹配行号,请使用以下命令:

merge(a1, a1, by = 0)
##   Row.names A.x A.y
## 1         1   1   1
## 2         2   1   1

或匹配行号并仅返回左侧实例:

library(sqldf)

sqldf("select x.* from a1 x left join a1 y on x.rowid = y.rowid")
##   A
## 1 1
## 2 1

或匹配行号并返回两个实例:

sqldf("select x.A A1, y.A A2 from a1 x left join a1 y on x.rowid = y.rowid")
##   A1 A2
## 1  1  1
## 2  1  1

推荐阅读