我有一个光栅,让我们想象它现在是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
答案 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