繁体   English   中英

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

[英]How to move a cell value of a raster to another target cell using R

我有一个栅格,现在可以想象它是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应该是所有其他Feed单元格的总和。 有任何想法吗? 我在“提取”和“ 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: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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM