在两个不同的数据框中比较列

问题描述:

所以我有两个数据框,我想要匹配第一个数据框中的一列和另一个数据框中的第二列。在两个不同的数据框中比较列

df = data.frame(source=c("XRHxl8gq","2b790Qqv","mrgapJpQ","EsMfIbv1","ujOBob24","ujOBob24","EsMfIbv1"), 
       conv=c(362,247,222,160,86,65,34), all=c(19,17,26,12,22,25,11), intent=c(47,47,74,31,58,60,0)) 

df2 = data.frame(name=c("Bob","David","Mark","Sara","Alice","Cara","Chad","Donna","Elaine","Gary"), 
       source_id=c("XRHxl8gq","sr354136FH","2b790Qqv","myx645TH","mrgapJpQ","EsMfI546", 
          "ujOBob24","EsMfIbv1","fMHL45ts","sefihn")) 

我想结束与source_id匹配源,以便我可以在名称中插入一个新的df列。

> df 
    source conv all intent who 
1 XRHxl8gq 362 19  47 Bob 
2 2b790Qqv 247 17  47 Mark 
3 mrgapJpQ 222 26  74 Alice 
4 EsMfIbv1 160 12  31 Cara 
5 ujOBob24 86 22  58 Chad 
6 ujOBob24 65 25  60 Chad 
7 EsMfIbv1 34 11  0 Cara 

# find what values in both columns are similar. 
both = intersect(df[,1], df2[,2]) # IN BOTH COLUMNS 

# create a new column in the original data frame. 
df$who = c("") 

# match up source with source_id. 
str(df2) 
df2$name = as.character(df2$name) 
df$who[df$source %in% df2$source_id] <- df2$name 
df 

df$who[which(df$source %in% df2$source_id)]<-as.character(df2$name) 
df 

不幸的是,我似乎无法匹配的列,使每个来源与每个source_id相关联的名称相匹配。

任何人都可以帮忙吗?

您正在寻找merge

merge(df,df2, by.x="source", by.y="source_id", sort=F) 

#  source conv all intent name 
# 1 XRHxl8gq 362 19  47 Bob 
# 2 2b790Qqv 247 17  47 Mark 
# 3 mrgapJpQ 222 26  74 Alice 
# 4 EsMfIbv1 160 12  31 Donna 
# 5 EsMfIbv1 34 11  0 Donna 
# 6 ujOBob24 86 22  58 Chad 
# 7 ujOBob24 65 25  60 Chad 
+0

+1哇,这应该是很明显。谢谢! – ATMathew 2013-02-11 17:02:11