2013-06-12 20 views
7

Ich habe eine Liste von Vektoren, wie folgt aus:Wie eine Liste in eine Matrix in R konvertieren

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

ich die Liste in eine Matrix konvertieren wollen, wo der Inhalt jedes Vektors mit den zugeordnet sind, Listenindexnummer in doppelten Klammern.

Beispiel:

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

Bitte versuchen Sie es einheitliche Terminologie zu verwenden. Ihr Fragentitel fragt nach einem 'dat.frame', aber Ihre Frage fragt nach einer' Matrix'. – A5C1D2H2I1M1N2O1R2T1

+0

Sie haben bereits eine Fülle von Antwort, aber überprüfen Sie auch meine Ursache 'schmelzen' ist sehr nützlich, entweder für seine Flexibilität bei der Aufnahme als 'data.frame',' Array' und 'liste', und für die verschiedenen" schmelzenden "Optionen können Sie variiere die Parameter. – Michele

Antwort

9

können Sie unlist verwenden, um die Werte in der Liste zu bekommen, dann sapply verwenden, um die Anzahl der Werte in jedem Element der Liste zu bekommen.

# 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

Wenn l Ihre ursprüngliche Liste ist:

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 
Verwandte Themen