首先,很抱歉提出这样的问题。但我对得到意想不到的输出感到有点困惑。我想合并两个数据框。
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
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"))