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
Dans ce cas, il n'y aurait que deux lignes pour DF2 c'est à dire
Qui ne clarifie pas les choses. Nous avons besoin de savoir
Maintenant, il est une valeur unique pour chaque combinaison dans
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
Vous devez vous connecter pour publier un commentaire.
Comme Akrun mentionné dans les commentaires, votre table de recherche (DF2) doit être réduite à son unique A/B combinaisons. Pour votre dataframe, ce n'est pas un problème, mais vous aurez besoin de règles supplémentaires s'il y a plusieurs valeurs possibles pour la même combinaison. À partir de là, la solution est simple:
Notez que cela va produire une nouvelle dataframe avec un vide de la colonne d'ESSAI (toutes les valeurs
NA
), et une colonne VAL attribué à partir de DF2. Faire exactement ce que tu voulais (remplacer le TEST avec VAL, si possible), ici est un petit peu moins agiles code:EDIT: en réponse à votre question, vous pouvez faire bouillir vers le bas DF2 si nécessaire assez simple:
oui, c'est simple, voir modifier ci-dessus.
Bien sûr, le réel des indices à prendre varient en fonction de ce que votre colonnes supplémentaires sont et comment ils se sont arrangés
Merci beaucoup Joe!
En Python pandas, vous pouvez simplement définir un composé clé à l'aide de variables A,B. Ensuite, c'est un simple gauche de la jointure de fusion.
OriginalL'auteur Joe
OriginalL'auteur RHA