2013-06-12 18 views
7

mam listę wektorów tak:Jak przekonwertować listę do matrycy w 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 

chcę przekonwertować listę do matrycy, gdzie zawartość każdego wektora są związane z wyświetlić numer indeksu w nawiasach podwójnych.

Przykład:

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

Spróbuj użyć spójnej terminologii. Twój tytuł pytania prosi o 'data.frame', ale twoje pytanie wymaga' matrycy'. – A5C1D2H2I1M1N2O1R2T1

+0

masz już mnóstwo odpowiedzi, ale sprawdź także mój. Przyczyna 'melt' jest bardzo przydatna ze względu na jego elastyczność w przyjmowaniu jako danych wejściowych' data.frame', 'tablica' i' lista' oraz dla kilku opcji "topienia", które możesz zmieniam parametry. – Michele

Odpowiedz

9

Można użyć unlist aby uzyskać wartości z listy, a następnie użyć sapply aby uzyskać liczbę wartości w każdym elemencie listy.

# 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

Jeśli l jest oryginalna lista:

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 
Powiązane problemy