在 R 中合并两个数据集

问题描述 投票:0回答:1

首先,很抱歉提出这样的问题。但我对得到意想不到的输出感到有点困惑。我想合并两个数据框。

x <- data.frame(id=c(1,1,1,2,2,2,3,3,3),
                vr1=c(1,2,3,4,5,6,7,8,9))
y <- data.frame(id=c(1,1,1,2,2,2,3,3,3),
                vr2=c(1,2,3,4,5,6,7,8,9))
z <- merge(x, y, by="id")

我期望输出如下:

  id vr1 vr2
1  1   1   1
2  1   2   2
3  1   3   3
4  2   4   4
5  2   5   5
6  2   6   6
7  3   7   7
8  3   8   8
9  3   9   9

但是,我得到了以下信息。我的错误是什么?

   id vr1 vr2
1   1   1   1
2   1   1   2
3   1   1   3
4   1   2   1
5   1   2   2
6   1   2   3
7   1   3   1
8   1   3   2
9   1   3   3
10  2   4   4
11  2   4   5
12  2   4   6
13  2   5   4
14  2   5   5
15  2   5   6
16  2   6   4
17  2   6   5
18  2   6   6
19  3   7   7
20  3   7   8
21  3   7   9
22  3   8   7
23  3   8   8
24  3   8   9
25  3   9   7
26  3   9   8
27  3   9   9
r dataframe merge inner-join
1个回答
0
投票

x 中的每个 id 1 与 y 中的每个 id 1 匹配,因此合并会为 id 1 生成 9 行。

如果行数与问题中的行数相同并且 id 值与问题中对应,则 cbind(x, y) 将给出所示的所需结果。

另一种可能性是您希望将 x 中的第 i 个 id 1 与 y 中的第 i 个 id 1 进行匹配。那样的话

x2 <- transform(x, seq = ave(id, id, FUN = seq))
y2 <- transform(y, seq = ave(id, id, FUN = seq))

merge(x2, y2, by = c("id", "seq"))
© www.soinside.com 2019 - 2024. All rights reserved.