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