2013-08-22 3 views
0

J'ai une liste nommée dont chaque élément est un vecteur de caractères. Je veux écrire cette liste dans une seule base de données où j'ai deux colonnes, une avec le nom du vecteur de caractère et la deuxième colonne avec chaque élément du vecteur de caractère. Toute aide serait appréciée.Dans R écrire liste avec plusieurs éléments à data.frame

+2

Il serait utile que vous pouvez illustrer ce w/a [exemple reproductible] (http: // stackoverflow. com/questions/5963269/comment-faire-un-grand-r-reproductible-exemple), à ​​savoir, un petit exemple de jeu de données et ce que vous voulez que la sortie ressemble. – gung

+0

Veuillez publier un exemple de sortie que vous recherchez. – Mayou

Répondre

1
NewList <- lapply(names(List), function(X) data.frame(Names=X, Characters=List[[X]])) 
do.call(rbind, NewList) 
0

Une façon très simple serait d'utiliser cbind(), comme ceci:

cbind(names(l),l) 

Cela se traduira par la trame de données suivante, en supposant que l = liste (a = "hache", b = "bx"):

 l 
a "a" "ax" 
b "b" "bx" 

Bien sûr, vous pouvez renommer les colonnes et les lignes en ajustant les valeurs colnames (l) et rownames (l). Dans cet exemple, les noms de chaîne sont également automatiquement appliqués aux rownames de la trame de données résultant, donc, en fonction de ce que vous voulez faire avec vos données,

cbind(l) 

pourrait suffire, ce qui

l 
a "ax" 
b "bx" 

J'espère que je pourrais vous aider.

+0

Bien sûr, il s'agit d'une solution pour les listes de chaînes de caractères plutôt que pour les vecteurs de caractères. Désolé si ce n'est pas ce que vous cherchiez. – maj

+0

Si cela est utilisé avec des listes contenant des vecteurs de caractères de longueur> 1, vous obtenez une matrice de listes. L'expression "listes de chaînes de caractères" n'est pas claire, mais peut-être vouliez-vous dire des listes de vecteurs de caractères de longueur 1? –

+0

Il m'a simplement fallu une seconde pour réaliser que dans R, les combinaisons de caractères comme dans "word123" (c'est ce que je voulais dire par "cordes") ne sont pas du tout les mêmes que vecteurs de caractères individuels. – maj

1

Peut-être

data.frame(vecname = rep(names(ll), sapply(ll, length)), chars = unlist(ll)) 

à ce que chaque élément de chaque composant de la liste correspond à une ligne dans la trame de données final.

+0

C'est essentiellement le code dans 'stack.default', sans quelques erreurs de vérification et d'avertissement. –

1

Je me demande si stack fournit les fonctions dont vous avez besoin (en utilisant l'exemple de Henrik)

ll <- list(x1 = c("a", "b", "c"), x2 = c("d", "e")) 
stack(ll) 
#------- 
    values ind 
1  a x1 
2  b x1 
3  c x1 
4  d x2 
5  e x2 
Questions connexes