La fusion de deux blocs de données de R et de trouver des valeurs communes et de la non-correspondance des valeurs
Je suis en train d'essayer de trouver une fonction pour correspondre à deux trames de données de longueurs différentes sur une seule et même colonne, et de créer une autre colonne qui indique si elle a trouvé un match ou pas.
Ainsi, par exemple,
df1:
Name Position location
francesca A 75
cristina B 36
Et df2:
location Country
75 UK
56 Austria
Et je voudrais correspondre sur le "Lieu" et de la sortie pour être quelque chose comme:
Name Position Location Match
francesca A 75 1
cristina B 36 0
J'ai essayé avec la fonction match
ou avec:
subset(df1, location %in% df2)
Mais il ne fonctionne pas.
Pourriez-vous svp m'aider à comprendre comment faire cela?
OriginalL'auteur user971102 | 2011-10-03
Vous devez vous connecter pour publier un commentaire.
Essayer:
Cela va ajouter une colonne à df1 indiquant la ligne qui en df2 matchs (en ne considérant que l'emplacement que vous avez spécifié). Si il n'y a pas de matches, zéro sera retourné, de sorte que vous obtenez:
Une mise en garde: si il y a plusieurs correspondances dans le deuxième tableau, vous souhaitez utiliser une approche différente, que cette méthode ne renvoie que le premier match. Je suppose que ces sont uniques en raison de la manière que vous avez spécifié à votre question, donc cela ne devrait pas être un problème.
Salut @user971102 - content il a travaillé pour vous (si la réponse a résolu votre problème, veuillez l'accepter pour que les autres le savent). Pour obtenir les dossiers de df2 qui ne sont pas en df1, essayez: df2[qui(est.na(match(df2$emplacement, df1$lieu))),] Ou, de manière plus intuitive, df2[-qui(df2$emplacement de %en% df1$lieu),]
Désolé Jason B, juste une dernière précision...Comme vous l'avez dit que cette méthode ne fonctionne pas si les valeurs ne sont pas uniques, j'ai eu une étape supplémentaire dans le début pour s'assurer il n'y a qu'un seul enregistrement pour "localisation" en faisant: df1_unique<-sous-ensemble(df1, !dupliqué(emplacement)), pour les deux df1 et df2. Mais ne devrait-il pas dire qu'il devrait être 0 ou 1 les valeurs de 'match' de la colonne? Mais mes valeurs pour 'match' ne sont pas seulement = 1 ou 0...
de soucis.
df1$match
est de donner à la ligne dansdf2
qui correspond àlocation
dansdf1
. Si vous voulez juste des zéros et des uns, vous pouvez ajouter une étape:df1$match<-ifelse(df1$match>0,1,0)
ou, peut-être qu'il serait mieux d'utiliser des partitions logiques contenues:df1$match=as.logical(df1$match)
OriginalL'auteur Jason B