2013-06-12 5 views
7

I ont une liste de vecteurs, comme ceci:Comment convertir une liste dans une matrice en R

[[1]] 
[1] 1 2 7 9 10 13 14 15 20 

[[2]] 
[1] 3 4 5 6 

[[3]] 
[1] 8 11 12 

[[4]] 
[1] 16 17 18 19 

[[5]] 
[1] 21 22 23 

Je veux convertir la liste à une matrice où le contenu de chaque vecteur sont associés à la liste le numéro d'index entre parenthèses.

Exemple:

 [,1] [,2] 
[1,] 1 1 
[2,] 1 2 
[3,] 1 7 
[4,] 1 9 
[5,] 1 10 
[6,] 1 13 
[7,] 1 14 
[8,] 1 15 
[9,] 1 20 
[10,] 2 3 
[11,] 2 4 
[12,] 2 5 
[13,] 2 6 
[14,] 3 8 
[15,] 3 11 
[16,] 3 12 
[17,] 4 16 
[18,] 4 17 
[19,] 4 18 
[20,] 4 19 
[21,] 5 21 
[22,] 5 22 
[23,] 5 23 
+0

S'il vous plaît essayer d'utiliser une terminologie cohérente. Le titre de votre question demande un 'data.frame', mais votre question demande une' matrix'. – A5C1D2H2I1M1N2O1R2T1

+0

vous avez déjà une bonne réponse mais vérifiez aussi la mienne cause 'melt' est très utile soit pour sa flexibilité en prenant en entrée' data.frame', 'array' et' list', et pour les nombreuses options de "fusion" vous pouvez avoir varier les paramètres. – Michele

Répondre

9

Vous pouvez utiliser unlist pour obtenir les valeurs dans la liste, puis utilisez sapply pour obtenir le nombre de valeurs dans chaque élément de la liste.

# Generate the list 
a <- list(1:10, 20:30, 40:45) 
# Find the number of elements 
num.el <- sapply(a, length) 
# Generate the matrix 
res <- cbind(unlist(a), rep(1:length(a), num.el)) 
2

Si l est votre liste originale:

cbind(rep(seq_along(l), times=sapply(l, length)), unlist(l)) 
7
library(reshape2) 

lst <- list(c(1:3), c(11:12), c(22)) 

> melt(lst) 
    value L1 
1  1 1 
2  2 1 
3  3 1 
4 11 2 
5 12 2 
6 22 3 
Questions connexes