2013-02-11 5 views
1

두 개의 데이터 프레임이 있고 첫 번째 데이터 프레임의 한 열과 다른 데이터 프레임의 두 번째 열을 일치 시키려합니다. 내가 이름으로 안양에 새 열을 삽입 할 수 있도록두 개의 서로 다른 데이터 프레임의 열 비교

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 
    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과 관련된 이름와 일치되도록 열을 일치 수없는 것.

아무도 도와 드릴 수 있습니까?

답변

8

당신은 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

관련 문제