2016-12-02 6 views
0

У вас есть два кадра данных:значение согласования с несколькими значениями в г

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 

Я знаю, как соответствовать отдельные значения так что, когда значения «А» соответствуют по 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 

Как вы подходите несколько значений, таких, что значение «C» будет соответствовать, когда «A» и «B» являются одинаковыми по ДФ и df2?

+1

вы хотите 'слияния (ДФ, df2)' – shayaa

ответ

3

вы могли бы использовать interaction между A и B к match так:

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