2010-09-08 6 views
2

Comment puis-je ajouter une liste de vecteurs à un data.frame pré-alloué de sorte que les vecteurs forment les lignes du data.frame?ajouter une liste de vecteurs à un data.frame dans R

par ex.

ll<-list(c(1,2,3),c(2,3,4)) 
dd<-data.frame(matrix(nrow=10,ncol=3)) 

J'ai besoin dd ressembler

1 2 3 
2 3 4 

Répondre

5

Il y a quelque chose d'étrange au sujet de la question: Vous construisez une trame de données avec 10 lignes, rempli de valeurs NA, mais vous devez dd avoir seulement 2 lignes.

Pour répondre à votre question d'abord: parfois l'évidence n'est pas une mauvaise solution.

ll<-list(c(1,2,3),c(2,3,4)) 
dd<-data.frame(matrix(nrow=5,ncol=3)) 

for(i in 1:length(ll)){ 
    dd[i,] <- ll[[i]] 
} 
dd 

Si vous êtes à regarder le laid pour boucle: ceci est un cas où vous pouvez réellement utiliser une boucle for sans problème. Mais cela maintient dd ayant des tonnes de valeurs NA. Si vous voulez vous débarrasser d'eux, soit vous initialiser votre dataframe comme

dd<-data.frame(X1=numeric(0),X2=numeric(0),X3=numeric(0)) 

qui vous donne un dataframe vide, ou si vous utilisez complete.cases() pour supprimer tous les NAs:

dd <- dd[complete.cases(dd),] 
+0

+1 pour complete.cases() –

8
do.call(rbind, ll) 

pour ajouter une trame de données existante

rbind(dd, do.call(rbind, ll) 
# OR 
do.call(rbind, c(ll, list(dd)) 

Si vous faites cela pour beaucoup de trames de données, voir rbind.fill dans le package plyr pour une approche beaucoup plus efficace.

Questions connexes