gpt4 book ai didi

r - 计算矩阵内的元素

转载 作者:行者123 更新时间:2023-12-05 04:36:16 25 4
gpt4 key购买 nike

我正在生成用零和一填充的随机矩阵。每次模拟的维度可能不同。

下面的示例矩阵

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 0 0 1 0 0
[2,] 0 1 1 0 0 0 0 0 0 0
[3,] 0 0 0 0 1 0 0 0 0 1
[4,] 0 1 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0 1
[6,] 1 0 1 0 0 0 1 1 1 0
[7,] 0 0 0 0 0 0 1 1 0 0
[8,] 0 0 0 0 0 0 0 0 0 0
[9,] 0 0 1 0 0 1 0 0 1 1
[10,] 0 0 0 0 0 0 0 1 0 0

还有一点可视化

enter image description here

输出版本。

structure(c(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0), .Dim = c(10L,
10L))

我想计算两件事:

  1. 由一个组成的簇的数量(簇是指一组相邻的簇,其中对角线上的元素不相邻),
  2. 每个集群中的数量。

我想我设法用这个函数解决了第一点

library(raster)
count_clusters <- function(grid) {
attr(clump(raster(grid), direc=4), 'data')@max
}

对于上面正确的矩阵,此函数将返回 14。

不幸的是,我不知道如何解决第二个任务。所需函数应返回以下输出:c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 5)

如果有任何提示或技巧,我将不胜感激。

最佳答案

计算每个集群中的数量:

grid <-structure(c(0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1,
0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0), .Dim = c(10L,
10L)) + 10L))
x <- clump(raster(grid), direc=4)

从 RasterLayer @data@values 获取值。

vals <- x@data@values

使用以下值创建数据框:

dt <- tibble(cluster = vals)

删除NA值,按簇分组并计数

result <- dt %>% 
filter(!is.na(cluster)) %>%
group_by(cluster) %>%
tally()

result$n
[1] 1 2 1 1 1 1 1 1 1 5 1 1 2 1

关于r - 计算矩阵内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70868608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com