2016-12-02 78 views
0

你有两个数据帧:数值与多个值匹配r中

df <- data.frame(A = c(1,1,2,2,3,3), B = c('cat','dog','cat','dog','cat','dog'), C = c(100,200,300,400,500,600)) 
df2 <- data.frame(A = c(1,1,1,1,2,2,2,2,3,3,3,3), B = c('cat','dog','cat','dog','cat','dog')) 

输出DF1:

A B C 
1 cat 100 
1 dog 200 
2 cat 300 
2 dog 400 
3 cat 500 
3 dog 600 

输出DF2:

A B 
1 cat 
1 dog 
1 cat 
1 dog 
2 cat 
2 dog 
2 cat 
2 dog 
3 cat 
3 dog 
3 cat 
3 dog 

我知道如何搭配单值这样当'A'值在df和df2上匹配时,它会将该值添加到df2:

df2$match <- df$C[match(df2$A, df$A)] 

输出:

A B match 
1 cat 100 
1 dog 100 
1 cat 100 
1 dog 100 
2 cat 300 
2 dog 300 
2 cat 300 
2 dog 300 
3 cat 500 
3 dog 500 
3 cat 500 
3 dog 500 

你如何匹配多个值,这样当“A”和“B”是跨越DF和DF2相同的“C”的值相匹配?

+1

你想'合并(DF,DF2)' – shayaa

回答

3

您可以使用interactionmatch这样之间AB到:

df2$match <- df$C[match(interaction(df2$A, df2$B), interaction(df$A, df$B))] 
> df2 
    A B match 
1 1 cat 100 
2 1 dog 200 
3 1 cat 100 
4 1 dog 200 
5 2 cat 300 
6 2 dog 400 
7 2 cat 300 
8 2 dog 400 
9 3 cat 500 
10 3 dog 600 
11 3 cat 500 
12 3 dog 600