do.call (rbind, list) pour un nombre impair de colonnes
J'ai une liste, chaque élément étant un caractère de vecteur, de longueurs différentes
Je voudrais lier les données sous forme de lignes, de sorte que les noms de colonne "line up" et si vous disposez de plus de données, puis créer la colonne et s'il manque de données, puis créer NAs
Ci-dessous est un exemple fictif de données, je travaille avec
x <- list()
x[[1]] <- letters[seq(2,20,by=2)]
names(x[[1]]) <- LETTERS[c(1:length(x[[1]]))]
x[[2]] <- letters[seq(3,20, by=3)]
names(x[[2]]) <- LETTERS[seq(3,20, by=3)]
x[[3]] <- letters[seq(4,20, by=4)]
names(x[[3]]) <- LETTERS[seq(4,20, by=4)]
La ligne ci-dessous devrait normalement être ce que je ferais si j'étais sûr que le format de chaque élément a été la même...
do.call(rbind,x)
J'espérais que quelqu'un était venu avec une belle petite solution qui correspond à la colonne des noms et remplit les blancs avec NA
s, tandis que l'ajout de nouvelles colonnes si dans le processus de liaison de nouvelles colonnes sont trouvés...
source d'informationauteur h.l.m
Vous devez vous connecter pour publier un commentaire.
rbind.fill
est un jeu génial de fonction qui fait vraiment du bien sur la liste de données.les cadres. Mais à mon humble avis, pour ce cas, il peut être fait beaucoup plus rapidement lorsque la liste contient seulement (nommé) de vecteurs.La
rbind.fill
façonFaçon plus simple (et efficace pour ce scénario au moins):
Fondamentalement, nous obtenons total des noms uniques pour former les colonnes de la finale des données.cadre. Ensuite, nous créons une liste avec longueur = l'entrée et il vous suffit de remplir le reste des valeurs avec
NA
. C'est probablement la "délicate" de la partie que nous avons de faire correspondre les noms tout en remplissant NA. Et puis, nous avons mis les noms une fois enfin pour les colonnes (qui peut être définie par référence à l'aide desetnames
dedata.table
paquet aussi bien en cas de besoin).Maintenant, pour certains d'analyse comparative:
De données:
Fonctions:
Mise à jour (ajout GSee de la fonction en tant que bien):
Benchmarking:
Si vous voulez que le résultat soit une matrice...
Récemment, j'ai écrit cette fonction pour un collègue qui voulait rbind vecteurs dans une matrice.