2016-03-24 19 views
1

matrisini yeniden şekillendirin. El ile yazılmış posta kodları veri kümesiyle çalışıyorum. Böyle veri kümesi yükleyen:Bir data.frame öğesinin her satırını R

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

Sonra sadece olanları alıyorum:

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

Şu anda ones I 442 satır var, 256 sütun ile. Her satırı ones'da bir 16x16 matrix'a dönüştürmem gerekiyor. Ne aradığım bu soruya olanlar gibi 16x16 matris bir liste olduğunu düşünüyorum:

How to create a list of matrix in R

Ama benim verilerle denenmiş ve işe yaramadı.

İlk başta ones <- apply(ones, 1, matrix, nrow = 16, ncol = 16) numaralı telefonu denedim ama çalışmadığını düşündüğüm gibi çalışmıyor. Ayrıca şanssız lapply denedim.

+1

Örnek veriler ve istenen çıktı yardımcı olabilir. – coffeinjunky

cevap

2

, sen lapply ile deneyebilirsiniz basit yolu muhtemelen olmasına rağmen:

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

Args !, çok teşekkür ederim, saatlerce çalışıyorum. Böyle bir çözüm düşünmezdim. – elbaulp

+1

:-) Hoşunuza giderse "unstuck" size yardım etti :-) – Cath

4

Alternatif sadece matris dim s değiştirmektir.

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 

Size "satırında", "sütununda" olarak boyutlarını belirtmek böylece ", üçüncü boyut bundan üç boyutlu dizi oluşturmak için arıyoruz:

aşağıdaki matris "M" düşünün ". Ancak, matris sütun tarafından oluşturulduğundan, boyutları değiştirmeden önce ilk önce t numarasına ihtiyacınız vardır.

`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

bir listeye güzel bir alternatif, akıllı yol :-) – Cath

İlgili konular