R 匹配两列,使长度增加三分之一

R 匹配两列,使长度增加三分之一,r,match,R,Match,我有两个data.frames: df1 <- data.frame(ID = c(1,2,3,4), Birth.date = c("2015-09-16","2015-09-17","2015-09-18","2015-09-19")) df2 <- data.frame(ID = c(1,1,2,2,3,3,4,4), value = c("a","b","c","d","e","a","b","c")) 我尝试使用match(),但它给出了以下结果: df2$Birth.

我有两个
data.frame
s:

df1 <- data.frame(ID = c(1,2,3,4), Birth.date = c("2015-09-16","2015-09-17","2015-09-18","2015-09-19"))

df2 <- data.frame(ID = c(1,1,2,2,3,3,4,4), value = c("a","b","c","d","e","a","b","c"))
我尝试使用
match()
,但它给出了以下结果:

df2$Birth.Date <- df1[match(df1$ID, df2$ID),2]

df2

  ID value Birth.Date
1  1     a 2015-09-16
2  1     b 2015-09-18
3  2     c       <NA>
4  2     d       <NA>
5  3     e 2015-09-16
6  3     a 2015-09-18
7  4     b       <NA>
8  4     c       <NA>

df2$Birth.Date我们可以使用
left\u-join

library(dplyr)
left_join(df2, df1, by = "ID")
#     ID value Birth.date
#1  1     a 2015-09-16
#2  1     b 2015-09-16
#3  2     c 2015-09-17
#4  2     d 2015-09-17
#5  3     e 2015-09-18
#6  3     a 2015-09-18
#7  4     b 2015-09-19
#8  4     c 2015-09-19

如果我们使用的是
match
,正确的选项是将
x
作为'df2'中的'ID',将
表作为'df1'中的'ID'

df2$Birth.date <- df1$Birth.date[match(df2$ID, df1$ID)]

df2$Birth.date使用
merge
从基R:

> merge(df2,df1,by.x = 'ID')

  ID value Birth.date
1  1     a 2015-09-16
2  1     b 2015-09-16
3  2     c 2015-09-17
4  2     d 2015-09-17
5  3     e 2015-09-18
6  3     a 2015-09-18
7  4     b 2015-09-19
8  4     c 2015-09-19

非常感谢。
匹配
更正有效,但
左联合
与我的实际数据不符-错误显示:索引超出范围。我假设它与在
df1
中有5列而不是2列有关?@Bonono我不确定这个错误。当我们以“ID”加入时,它应该已经起作用了。我发现了问题所在-我忘记了在
df
中都有名为
ID
的列s@Bonono如果'ID1'和'ID2'是df1,df2中的列名,则不需要具有相同的列名,
left_join(df2,df2,by=c(“ID2”=“ID1”))
> merge(df2,df1,by.x = 'ID')

  ID value Birth.date
1  1     a 2015-09-16
2  1     b 2015-09-16
3  2     c 2015-09-17
4  2     d 2015-09-17
5  3     e 2015-09-18
6  3     a 2015-09-18
7  4     b 2015-09-19
8  4     c 2015-09-19