![](/img/trans.png)
[英]Assigning cell values of one raster to the adjacent cells of another using 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.