如何使用R将栅格的单元格值移动到另一个目标单元格

时间:2015-01-26 09:50:40

标签: r raster

我有一个光栅,让我们想象它现在是3 * 3(虽然它实际上要大得多)。每个栅格单元具有值,不同的值 - 即不同的Z值。我知道栅格中每个单元格的单元格编号(即它们是单元格编号1到9,顶行为1到3,中间行为4到6,底行为7到9。

我还有另一个带有每个细胞的'目标'细胞数的光栅 - 比如说,细胞数1,2,3,4,7,8,9的目标细胞是5(即目标细胞)除5和6外,所有细胞的中间细胞,细胞5的靶细胞是细胞6,细胞6不具有靶细胞。

所以我想要做的是编写代码,根据目标栅格将原始栅格的Z值移动到特定的目标单元格中​​。事实上,细胞5应该是所有其他饲料细胞的总和。有任何想法吗?我用'extract'和'setValues' - '和'相邻'玩了一点但是不能正确。

非常感谢任何帮助

安东尼

例如,此栅格具有Z值:

20 24 22
18 34 26
21 24 32

因此,单元格编号看起来像这样:

1 2 3
4 5 6
7 8 9

并且目标栅格看起来像这样:

5 5 5
5 6 Out
5 5 5

并且代码将在移动单元格值后生成输出栅格:

0 0 0
0 161 34
0 0 0

在第二次迭代中,栅格看起来像这样:

0 0 0
0 0 161
0 0 0

并且第三次迭代看起来像这样:

0 0 0
0 0 0
0 0 0

1 个答案:

答案 0 :(得分:1)

嗯,这很有趣。我想的主要想法是我必须循环1:9矩阵/数组。

> library(data.table)
> r1 <- matrix(c(20,18,21,24,34,24,22,26,32), nrow=3, ncol=3)
> r1
     [,1] [,2] [,3]
[1,]   20   24   22
[2,]   18   34   26
[3,]   21   24   32
> r1.i <- as.integer(t(r1))
> rt <- matrix(c(5,5,5,5,6,5,5,0,5), nrow=3, ncol=3)
> rt
     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    6    0
[3,]    5    5    5
> rt.i <- as.integer(t(rt))
> r.sequence <- data.table(x = 1:9)
> r3 <- r1.i
> for (i in 1:3) {
+   r3 <- r.sequence[, sum(r3[which(rt.i == x)]), by=x]
+   r3 <- r3$V1
+   print(matrix(r3, nrow=3, ncol=3, byrow=T))
+ }
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0  161   34
[3,]    0    0    0
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0  161
[3,]    0    0    0
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
[3,]    0    0    0