1mの解像度でバイナリラスタ(r)を使用していますが、これを4mの解像度でパーセンテージ値に変換したいと思います。この新しいラスタの各ピクセル値は、 4ピクセルのうち1ピクセルの合計周波数に基づいて計算されます。私はaggregate
機能を持つraster
パッケージを見ました。ただし、これは機能しません。バイナリラスタをパーセンテージに集計する方法R
newras <-aggregate(r, fact=4, fun= percent)
1mの解像度でバイナリラスタ(r)を使用していますが、これを4mの解像度でパーセンテージ値に変換したいと思います。この新しいラスタの各ピクセル値は、 4ピクセルのうち1ピクセルの合計周波数に基づいて計算されます。私はaggregate
機能を持つraster
パッケージを見ました。ただし、これは機能しません。バイナリラスタをパーセンテージに集計する方法R
newras <-aggregate(r, fact=4, fun= percent)
あなたがしていることは面倒ではありませんなぜなら、percentage
という関数がないからです。しかし、あなたは1つを作ることができます。この場合、平均値は分数なので、100を掛けてパーセンテージを求めます。
例データ
library(raster)
r <- raster()
set.seed(0)
values(r) <- sample(0:1, ncell(r), replace=TRUE)
a <- aggregate(r, 4, fun=function(x,...) 100 * mean(x))
# or
a <- 100 * aggregate(r, 4, mean)
がNA
値それぞれの新しいセルに16個のセルを集約う4メートルの解像度に変換する
r[sample(ncell(r), 0.9 * ncell(r))] <- NA
# Make a function and use it
percentage <- function(x, ...) { x <- na.omit(x); 100 * mean(x) }
a <- aggregate(r, 4, fun=percentage)
# or do
a <- 100 * aggregate(r, 4, fun=mean, na.rm=TRUE)
ここでは行列を使用する方法です。私は40×40の行列を使用しています。
mtx <- matrix(sample(0:1, 40^2, TRUE), 40, 40)
インデックスは、グループ化のための引数として使用する:
inds <- Map(seq, seq(1, 37, 4), seq(4, 40, 4))
グループを4×4ブロックに寸法が4
オリジナル行列の倍数でない場合の方法は、いくつかの考えが必要になります。 blockarray
には16行(グループ内の各要素)と100列(グループを表す)があります。結果の
pcts <- matrix(colMeans(blockarray)*100, 10, 10)
目視検査:結果の
image(mtx, zlim = 0:1, col = c("white", "black"))
image(pcts, zlim = c(0, 100), col = colorRampPalette(c("white", "black"))(11))
検証:
sum(mtx[1:4, 5:8])/16*100
pcts[1, 2]
40×40 = 16×100
blockarray <- mapply(function(i, j) mtx[i, j],
rep(inds, times = 10),
rep(inds, each = 10))
は割合行列を取得するにことに注意してください
を考える集計、ない4.でしょう、あなたのオリジナルのラスター常に各次元に4つのセルの倍数がありますか? – Bazz
オリジナルのラスタには4つのセルの倍数がないかもしれませんが、4mの解像度に合わせてサイズを変更できます。 – Arihant
助けが簡単になるように再現可能な例を与えてください –