J'ai 2 cadres de données avec un nombre différent de colonnes chacune. Certaines des colonnes sont courantes entre les 2 cadres de données. Comment puis-je rbind uniquement les colonnes communes des deux cadres de données à un nouveau cadre de données? p>
J'ai essayé avec merci beaucoup
CE P> bibliothèque (plyr); rbind.fill (a, b) code> Cependant, il définit des valeurs na dans les colonnes qui ne correspondent pas, ce qui ne m'aide pas. P>
3 Réponses :
Utiliser intersect code> pour extraire les colonnes communes.
rbind(
dfr1[common_cols],
dfr2[common_cols]
)
Très succinct et compréhensible. +1
Pas besoin d'utiliser un sous-ensemble ici - et vous souhaitez généralement éviter la programmation avec une fonction utilisant une évaluation non standard. (Et je ne suis pas sûr de savoir pourquoi vous voudriez l'utiliser car il est plutôt verbeux par rapport à dfr1 [common_cols] code>)
Voici ma solution espère que j'ai eu votre question à droite
Que se passe-t-il si df2 code> a des colonnes qui ne sont pas dans
df1 code>?
En outre, l'appel à sous-ensemble code> n'est pas nécessaire. Si vous allez utiliser indexation ultérieure, vous pouvez simplement les transmettre le vecteur logique créé par
noms (df1)% en% noms (DF2) code>.
Quant à votre premier commentaire: Si DF2 a des colonnes qui ne sont pas dans DF1 - elles ne sont pas courantes et je ne veux pas les filtrer - ni je me trompe? Quant à votre deuxième commentaire: c'est vrai que ce serait mieux probablement je l'ai fait un peu trop bâclé ...
S'ils sont dans DF2 mais pas dans df1, ils ne sont pas communs, alors vous faire i> veulent les filtrer. Mon point est que % en% code> n'est pas symétrique, tandis que
intersect code> est. Vous auriez besoin de
bind1 <- df1 [ noms (df1)% en% noms (DF2)]] code> et
bind2 <- df2 [ noms (DF2)% en% noms (DF1) ] code>.
a fait ma propre fonction pour mon colis personnel: (cela fonctionne également pour plus de 2 dataframes)
Fonction: strong> p> df1 <- mtcars[1:5,1:4]
df2 <- mtcars[6:10,2:5]
df3 <- mtcars[11:15,4:7]
fast.rbind(df1,df2,df3,method="common")
fast.rbind(df1,df2,df3,value="yourDesiredFill")