Étant donné deux dataframes a
et b
:
> a
a b c
1 -0.2246894 -1.48167912 -1.65099363
2 0.5559320 -0.87898575 -0.15634590
3 1.8469466 -0.01487524 -0.53098215
4 -0.6875051 0.23880967 0.01824621
5 -0.6735163 0.75485292 0.44154092
> b
a c
1 0.4287284 -0.3295925
2 0.5201492 0.3341251
3 -2.6355570 1.7916780
4 -1.3645337 1.3642276
5 -0.4954542 -0.6660001
Existe-t-il un moyen simple de concaténer ces derniers afin de renvoyer une nouvelle trame de données du formulaire ci-dessous?
> new
a b c
1 -0.2246894 -1.48167912106676 -1.65099363
2 0.5559320 -0.878985746842256 -0.15634590
3 1.8469466 -0.0148752354840942 -0.53098215
4 -0.6875051 0.238809666690982 0.01824621
5 -0.6735163 0.754852923524198 0.44154092
6 0.4287284 NA -0.32959248
7 0.5201492 NA 0.33412510
8 -2.6355570 NA 1.79167801
9 -1.3645337 NA 1.36422764
10 -0.4954542 NA -0.66600006
Je veux fusionner les dataframes, faire correspondre les en-têtes et insérer NA
pour les positions dans dataframe b
où l'en-tête est manquant.
r
dataframe
concatenation
Darren J. Fitzpatrick
la source
la source
merge()
? Pourquoi ça ne marche pas?Réponses:
Vous voulez "rbind".
rbind exige que les trames de données aient les mêmes colonnes.
La première ligne ajoute la colonne b à la trame de données b.
Résultats
la source
Reduce(rbind, list_of_data_frames)
pour les écraser tous ensemble!rbind
venez de la base pour une raison étrange: j'ai utilisérbind.data.frame
Essayez le package plyr :
la source
plyr
n'est tout simplement pas judicieux d' éviter les packages extrêmement courants, comme lorsqu'il offre les bons outils pour le travail.plyr
est un paquet commun terrible.vous pouvez utiliser la fonction
bind_rows(a,b)
de la bibliothèque dplyr
la source
cbind
(rbind
), cette fonction ne change pas le type de toutes les colonnes (lignes) enfactor
si un vecteur de caractères est présent.Voici une petite fonction simple qui reliera deux ensembles de données ensemble après avoir détecté automatiquement les colonnes manquantes de chacun et les avoir ajoutés avec tous les
NA
s.Pour une raison quelconque, cela renvoie BEAUCOUP plus rapidement sur des ensembles de données plus volumineux que l'utilisation de la
merge
fonction.la source
NA
todouble
dans sa réponse. Ce serait bien lorsque le type de la nouvelle colonne était du même type que la colonne existante dans l'autre bloc de données. Peut-être viamode(d2[d2.add[i]]) <- mode(d1[d2.add[i]])
. Mais je ne suis pas sûr que ce soit la manière appropriée.Vous pouvez utiliser,
rbind
mais dans ce cas, vous devez avoir le même nombre de colonnes dans les deux tables, alors essayez ce qui suit:la source