我有两个数据框“cb”和“ca”,它们共享一个列名“Item”,具有相同类型的元素(factor)。然而,左合并无法生成与x数据帧大小相同的数据帧。我错过了什么?非常感谢提前。
ca <- data.frame(A = c(1,2,3,2,1), Item = c("1","1","2","2","2"))
cb <- data.frame(B = c(2,3,1,2), Item = c("1","1","2","2"))
t <- merge(cb,ca, by = "Item", all.x = TRUE, sort = FALSE)
合并结果:
Item B A
1 1 2 1
2 1 2 2
3 1 3 1
4 1 3 2
5 2 1 3
6 2 1 2
7 2 1 1
8 2 2 3
9 2 2 2
10 2 2 1
但我需要的是:
> t
Item A B
1 1 2
1 2 3
2 3 1
2 2 2
非常感谢提前!
答案 0 :(得分:1)
由于@ won782建议,可能是由于重复。这是一个小型的MWE,展示了(合并双方)对合并的重复。
首先,我们没有重复:
ca <- data.frame(A = 1:4 , Item = 1:4)
cb <- data.frame(B = 11:13, Item = 1:3)
merge(ca, cb, by = "Item", all.x = TRUE)
# Item A B
# 1 1 1 11
# 2 2 2 12
# 3 3 3 13
# 4 4 4 NA
如果我们在&#34;左边&#34;所有人看起来都很好:
ca <- data.frame(A = 1:4 , Item = c(1L,1:3))
cb <- data.frame(B = 11:13, Item = 1:3)
merge(ca, cb, by = "Item", all.x = TRUE)
# Item A B
# 1 1 1 11
# 2 1 2 11
# 3 2 3 12
# 4 3 4 13
但是,如果我们在右侧有重复项,则左侧的每个匹配行都会相应地重复。即,参见&#34;项目1&#34;
ca <- data.frame(A = 1:4 , Item = 1:4)
cb <- data.frame(B = 11:14, Item = c(1L,1:3))
merge(ca, cb, by = "Item", all.x = TRUE)
# Item A B
# 1 1 1 11
# 2 1 1 12
# 3 2 2 13
# 4 3 3 14
# 5 4 4 NA
注意ca
中的4行如何在合并中产生5行。
如果我们两边都有傻瓜,它会爆炸一点。现在我们有&#34;项目1,A 1&#34;两次&#34; (同样适用于&#34; A 2&#34;):
ca <- data.frame(A = 1:4 , Item = c(1L,1:3))
cb <- data.frame(B = 11:14, Item = c(1L,1:3))
merge(ca, cb, by = "Item", all.x = TRUE)
# Item A B
# 1 1 1 11
# 2 1 1 12
# 3 1 2 11
# 4 1 2 12
# 5 2 3 13
# 6 3 4 14
有几个关于合并数据的好教程。不要限制自己搜索&#34; R merge&#34;,你可以找到很多搜索&#34; SQL join&#34;同样(添加&#34;教程&#34;和/或&#34; howto&#34;对这些搜索可能会有所帮助)。
但是,最重要的是,没有&#34;一般答案&#34;对于这个问题,因为它实际上是设计&#34;。除此笛卡尔联合之外的任何其他内容都需要数据减少或使用其他密钥(现有或附加)来阐明您希望如何加入。