2016-06-29 26 views
-1

Wenn ich eine Matrix haben wieMatrix Umlagerung in R

 A B F 
    1 .5 .25 .4 
    2 .25 .3 .1 
    3 .15 .2 .3 

Ich möchte etwas von der Form eines Datenrahmens zu schaffen, wie

1 A .5 
    2 A .25 
    3 A .15 
    1 B .25 
    2 B .3 

etc .. Ich habe versucht mit der Paket umwandeln ohne Glück und fragte mich, ob es einen Weg gab, dies in R. zu tun.

+1

Verwenden Sie 'stack (as.data.frame (temp))' Dabei steht temp für den Namen Ihrer Matrix. – lmo

Antwort

0

Sie können die Tatsache ausnutzen, dass Matrizen in R wirklich nur Vektoren sind, die ein dim (dh Dimensionen) Attribut haben auf sie angewendet.

In dem folgenden Beispiel gehe ich davon aus, dass Sie eine Matrix mit namens Dimensionen wie in Ihrer Frage vorgeschlagen haben.

mat <- matrix(1:9, 3, 3, dimnames=list(1:3,c("A","B","F"))) 

# A B F 
# 1 1 4 7 
# 2 2 5 8 
# 3 3 6 9 

# get names of dimensions 
rows <- as.numeric(rownames(mat)) 
cols <- colnames(mat) 

# reshape 
dat <- data.frame(row=rep(rows, times=ncol(mat)), 
        col=rep(cols, each=nrow(mat)), 
        value=as.vector(mat)) 

# row col value 
# 1 1 A  1 
# 2 2 A  2 
# 3 3 A  3 
# 4 1 B  4 
# 5 2 B  5 
# 6 3 B  6 
# 7 1 F  7 
# 8 2 F  8 
# 9 3 F  9