2016-03-24 20 views
1

Ich arbeite mit dem handgeschriebenen Postleitzahlen-Datensatz. Ich habe die Datenmenge wie folgt geladen:Jede Zeile eines data.frame zu einer Matrix umformen. R

digits <- read.table("./zip.train", 
        quote   = "", 
        comment.char  = "", 
        stringsAsFactors = F) 

Dann bekomme ich nur die, die:

ones <- digits[digits$V1 == 1, -1] 

Gerade jetzt, in ones Ich habe 442 Zeilen mit 256 Spalte. Ich muss jede Reihe in ones zu einem 16x16 matrix umwandeln. Ich denke, was ich suche eine Liste von 16x16 Matrix wie die, die in dieser Frage ist:

How to create a list of matrix in R

Aber ich versuchte, mit meinen Daten und hat nicht funktioniert.

Zuerst habe ich versucht ones <- apply(ones, 1, matrix, nrow = 16, ncol = 16) aber funktioniert nicht, wie ich dachte, es war. Ich habe auch lapply ohne Glück versucht.

+1

Beispieldaten und die gewünschte Ausgabe wären hilfreich. – coffeinjunky

Antwort

2

obwohl es wahrscheinlich einfache Möglichkeiten, können Sie versuchen, mit lapply:

ones_matrix <- lapply(1:nrow(ones), function(i){matrix(ones[i, ], nrow=16)}) 
+1

Args!, Vielen Dank, ich habe es stundenlang versucht. Ich hätte nie an eine solche Lösung gedacht. – elbaulp

+1

:-) freu dich das es dir geholfen hat dich zu "lösen" :-) – Cath

4

Eine Alternative ist nur noch die dim s Ihrer Matrix zu ändern.

Betrachten Sie die folgende Matrix „M“:

M <- matrix(1:12, ncol = 4) 
M 
#  [,1] [,2] [,3] [,4] 
# [1,] 1 4 7 10 
# [2,] 2 5 8 11 
# [3,] 3 6 9 12 

Wir suchen eine dreidimensionale Anordnung von diesem zu schaffen, so dass Sie die Dimensionen als „Zeile“ angeben können, „Spalte“, „dritte Dimension ". Da die Matrix jedoch nach Spalten aufgebaut ist, müssen Sie sie zuerst vor dem Ändern der Dimensionen t transponieren.

`dim<-`(t(M), c(2, 2, nrow(M))) 
# , , 1 
# 
#  [,1] [,2] 
# [1,] 1 7 
# [2,] 4 10 
# 
# , , 2 
# 
#  [,1] [,2] 
# [1,] 2 8 
# [2,] 5 11 
# 
# , , 3 
# 
#  [,1] [,2] 
# [1,] 3 9 
# [2,] 6 12 
+0

nette alternative zu einer liste, smarterweise :-) – Cath

Verwandte Themen