2013-06-12 27 views
7

Io ho un elenco di vettori, in questo modo:Come convertire un elenco in una matrice in 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 

voglio convertire l'elenco di una matrice in cui il contenuto di ciascun vettore sono associati con la elenca il numero indice tra parentesi.

Esempio:

 [,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

Si prega di provare ad usare una terminologia coerente. Il titolo della domanda richiede un 'data.frame', ma la tua domanda richiede una' matrice '. – A5C1D2H2I1M1N2O1R2T1

+0

hai già moltissime risposte ma controlla anche la mia causa "melt" è molto utile per la sua flessibilità nel prendere come input 'data.frame',' array' e 'list', e per le varie opzioni di" fusione "puoi hanno diversi parametri. – Michele

risposta

9

È possibile utilizzare unlist per ottenere i valori nella lista, quindi utilizzare sapply per ottenere il numero di valori in ciascun elemento della lista.

# 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

Se l è la vostra lista 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 
Problemi correlati