合并具有多行的两个data.frames,用于同一个人的不同情况

时间:2015-03-15 20:54:19

标签: r merge dataframe

合并两个数据集时遇到问题,希望有人可以帮助我。

以下是一些示例数据:

d1 <- data.frame(id=c(rep(1,3),2),a=c("x","y","z",NA),b=c(10,20,30,NA))
#    id    a  b
#  1  1    x 10
#  2  1    y 20
#  3  1    z 30
#  4  2 <NA> NA

d2 <- data.frame(id=c(rep(1,3)),a=c("x","y","z"),b=c(10,20,30),c=c("d","e","f"))
#   id a  b c
# 1  1 x 10 d
# 2  1 y 20 e
# 3  1 z 30 f

我想合并两个数据集以获得以下集合:

#   id    a  b    c
# 1  1    x 10    d
# 2  1    y 20    e
# 3  1    z 30    f
# 4  2 <NA> NA <NA>

然而,当我使用合并功能时,我得到一个意外的(至少对我来说)结果:

merge(d1,d2[,c("id","c")],all.x=TRUE,by="id")
#    id    a  b    c
# 1   1    x 10    d
# 2   1    x 10    e
# 3   1    x 10    f
# 4   1    y 20    d
# 5   1    y 20    e
# 6   1    y 20    f
# 7   1    z 30    d
# 8   1    z 30    e
# 9   1    z 30    f
# 10  2 <NA> NA <NA>

问题可能在于我有多行具有相同的'id' (每个代表同一个人的单独案件),但是, 我似乎无法在这里找出我做错了什么。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

@DavidArenburg发表评论,你可以这样做:

merge(d1, d2, all.x = TRUE, by = c("id", "a", "b"))