2016-03-28 15 views
0

Aşağıdaki veri çerçevesini düşünün orijinal boyutlarına:R - "Unmelt" bir erimiş dataframe geri

> df <- data.frame(x=sample(c(0,1),9,replace=T)) 
> df$x <- factor(df$x) 
> df 
    x 
1 1 
2 1 
3 0 
4 1 
5 0 
6 0 
7 0 
8 1 
9 1 

en çok ikili lojistik regresyon çıkışı (0,1) geldi diyelim ve ben bunu dönüştürmek istediğiniz 3x3 tarama. Bundan önce 3x3 veriye veya dizime ihtiyacım var. Ben bu sonucu nasıl ulaşabilir:

df 
    [,1] [,2] [,3] 
[1,] 1 1 0 
[2,] 1 0 0 
[3,] 0 1 1 

DÜZENLEME:

teşekkürler @A. Webb senin için yorum yap. Başka bir görevden bahsetmedim.

: Bana 23 204x212 matrisleri veya diziler halinde (43.248 satırları her) bölünmüş (sayısal) başka bir alana göre gereken büyük bir veri çerçevesi (994.704 satır) sahip, en sırayla raster dönüştürülmesi "y" diyelim

for (i in unique(df$y)){ 
    df.new.[i] <- raster(matrix(df$x[each 43248 rows],204,212,byrow=T)) 
} 

Yani df.new olarak adlandırılan 23 raster (204x212) yol açmalıdır [y değeri]:

> df 
      y x 
     1 27 1 
     2 27 1 
     3 27 0 
     4 27 1 
     5 27 0 
     6 27 0 
     7 27 0 
     8 27 1 
     9 27 1 
     10 27.5 1 
     11 27.5 1 
     12 27.5 0 
     13 27.5 1 
     14 27.5 0 
     15 27.5 0 
     16 27.5 0 
     17 27.5 1 
     18 27.5 1 
     ... 
    994704 38 1 

Benim mantığı, ben bile nasıl uygulanacağı değil eminim gibi bir şeydir.. Bu benim meydan okumamı temel alan daha gerçekçi bir örnek. Esasen

+0

'matrisi (as.numeric (seviyelerini yapmak (df $ x gibi bir şey olurdu öngörülen) [Df $ x]), 3,3, byrow = TRUE) '? –

+0

@ A.Webb, yorumunuz için teşekkürler. Gerçekten çalışıyor. Ama benim gerçek sorunumu yakından yansıtmak için yazımda bir düzenleme yaptım. – Jecogeo

cevap

2

Eğer

Şimdi
#dfx <- as.numeric(df$x) 
dfx <- runif(994704) 

Eğer

library(raster) 
b <- brick(nrow=204,ncol=212,nl=23) 
values(b) <- dfx 

RasterBrick 'b' yapabilir (bir faktör haline dönmeden) sayısal bir vektör var RasterLayer nesneler listesi daha kullanışlı ; ama bu neye ihtiyacınız olup olmadığını:

bs <- unstack(b) 

Bu değerler doğru sırayla

bir subsetting yaklaşımı (, sıra sıra raster içinde sol üst köşesinden raster tarafından raster) olduğunu varsayar sen

#example data 
y <- rep(1:23, each=204*212) 
df <- data.frame(x=dfx, y=y) 

şimdi

r <- raster(nrow=204,ncol=212) 
x <- list() 
for (i in unique(df$y)) { 
    v <- df[df$y==i, 'x'] 
    x[[i]] <- setValues(r, v) 
} 

s <- stack(x)