2016-03-28 6 views
0

には、次のデータフレームを考えてみましょう:R - 元の大きさに「Unmelt」溶融したデータフレーム

> 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 

だが、それはバイナリロジスティック回帰出力(0,1)から来て、私はそれを変換したいとしましょう3x3ラスタこの前に、私は3x3のデータフレームまたは配列を持つ必要があります。

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

EDIT:

おかげ@Aどのように私はこの結果に到達することができます。あなたのためのWebbのコメント。私は追加の仕事について言及していない。私はラスタに変換するために、別のフィールド(数値)に応じて23の204x212の行列または配列(それぞれ43248行)に分割する必要がある大きなデータフレーム(994704行)を持っています。

> 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 

私の根拠、でも私はそれを実装するかどうかはわかりません、のようなものです:。だから、df.newとして指名23ラスタ(204x212)を生じるはずである

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

[y値]。それはここの私の挑戦に基づくより現実的な例です。

+0

'マトリックス(as.numeric(レベルを行う(DFの$ xにようなものになるだろう構想)[df $ x])、3,3、byrow = TRUE) '? –

+0

@A.Webb、ご意見ありがとうございます。それは確かに動作します。しかし私は私の本当の問題を密接に反映させるために投稿を編集しました。 – Jecogeo

答えて

2

基本的にあなたが今、あなたは

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

RasterBrickを行うことができます「b」はRasterLayerオブジェクトのリストよりも便利である数値ベクトル(要因にそれをオンにしないでください)

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

を持っています;それは何が必要である場合:

bs <- unstack(b) 

これは、値が正しい順序で

サブセットのアプローチ(、行ごとのラスタ内の左上隅からのラスタによってラスタ)であることを前提とします

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

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) 
関連する問題