【发布时间】:2021-08-03 00:25:43
【问题描述】:
我从计算中得到一个矩阵。这个矩阵的点可以是 1,而矩阵的其余部分的值是 0、2 和 3。
> ##Working folder
> setwd("C:/Users/laure/Desktop/Code")
> ##Load matrix from excel
> mat <- read.csv("test.csv", header = TRUE)
> mat <- as.matrix(mat)
> mat
X1 X1.1 X0 X0.1 X0.2 X0.3 X1.2 X1.3
[1,] 1 0 0 0 3 0 0 2
[2,] 1 2 0 3 1 1 0 0
[3,] 0 0 0 0 3 1 0 0
[4,] 2 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 2 2
[6,] 0 0 1 0 0 0 2 2
[7,] 0 1 1 1 0 0 2 2
[8,] 0 0 1 1 0 0 2 2
[9,] 0 0 1 0 0 0 0 0
[10,] 0 0 0 0 0 0 0 0
[11,] 0 0 0 0 2 0 0 1
[12,] 0 0 0 0 2 2 1 1
[13,] 1 1 0 0 0 0 1 1
[14,] 1 1 0 0 0 1 1 1
[15,] 1 1 1 0 0 1 1 1
我想替换所有被 0 单元格值完全包围的 1 点(在此示例中,只有 1 个点完全被 0 包围)。我不想在边界上包括 1 的位置,因为没有完全包围。我不知道点的位置和数量,因为这取决于之前执行的计算。
我可以使用 clump 函数找到所有值为 1 的点,但是如何找到周围的单元格值并替换点单元格。
####convert matrix into raster
r <-raster(mat)
####select cells with criteria based on cell value
rx <- r == 1
###extract IDs of clumps according the criteria
rc <- clump(rx)
f <- freq(rc, useNA="no")
> f
value count
[1,] 1 2
[2,] 2 3
[3,] 3 7
[4,] 4 11
[5,] 5 7
【问题讨论】:
-
这是一种卷积类型的程序。您可以使用 for 循环来完成此操作
-
您可以使用 stackoverflow.com/questions/25596807/… 中的 compute_neighb_sum 函数来计算相邻单元格的总和。当结果为 0 时,您可以替换该值。
-
您的示例中会出现哪个
1?我看不出来...