Comment fusionner deux dataframes l'utilisation de plusieurs colonnes de clé?

Dire que j'ai la suite dataframes:

DF1 <- data.frame("A" = rep(c("A","B"), 18),
                  "B" = rep(c("C","D","E"), 12),
                  "NUM"= rep(rnorm(36,10,1)),
                  "TEST" = rep(NA,36))

DF2 <- data.frame("A" = rep("A",6),
                  "B" = rep(c("C","D"),6),
                  "VAL" = rep(c(1,3),3))

*Remarque: Chaque combinaison unique de variables A et B dans DF2 doit avoir un unique VAL.

Pour chaque ligne, je voudrais remplacer le NA dans TEST avec la valeur correspondante de VAL dans DF1 si les valeurs dans les colonnes A et A match et les valeurs dans les colonnes B et B correspondance pour la ligne. Sinon, je partirais TEST comme NA. Comment pourrais-je le faire sans en parcourant chaque combinaison à l'aide de match?

Idéalement, une réponse à l'échelle de deux trames de données avec de nombreuses colonnes de match.

Je pense que dans ton DF2 il y a plusieurs lignes qui pourrait correspondre à DF1 1er et 2e colonnes. Donc, je ne suis pas sûr de VAL doivent être prises. Aussi, s'appuyant sur l'exemple, les dimensions des deux jeux de données ne sont pas les mêmes.
Désolé, chaque combinaison unique de DF2 doit avoir un unique VAL. J'ai besoin de trouver un moyen de coder que dans l'exemple.
Dans ce cas, il n'y aurait que deux lignes pour DF2 c'est à dire DF2 <- data.frame(A=rep('A',2), B=c('C', 'D'), VAL=rnorm(2)) et merge obtiendrez le résultat merge(DF1, DF2, all=TRUE)
Qui ne clarifie pas les choses. Nous avons besoin de savoir VAL doit être choisi pour une combinaison donnée de A et B depuis plusieurs.
Maintenant, il est une valeur unique pour chaque combinaison dans DF2 donc je pense qu'il y a une seule option possible pour VAL pour chaque ligne de DF1. Je suppose que DF2 pourrait être réduite aux seules combinaisons uniques de prédicteurs.

OriginalL'auteur goldisfine | 2015-03-23