r - 计算矩阵内的元素

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

下面的示例矩阵

      [,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

还有一点可视化

输出版本。

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

https://stackoverflow.com/questions/70868608/

相关文章:

visual-studio - 如何在 D 盘中完全安装 Visual Studio?

snowflake-cloud-data-platform - 如何设置开发人员以在雪花(和 dbt

javascript - 在 React.js 中使用 Dropzone 时如何将图像上传到 Fir

ios - FBSDKGraphRequest 实例方法 '-startWithCompletion

tensorflow - `model.predict(x,batch_size=n)` 是否使用多

sql - 窗口 SUM 函数如何在内部与 OVER 一起工作?

exception - 如何跳过在 Kafka 中产生运行时异常的记录并保持流运行?

python - 可视化 DASK 任务图

c++ - 用方括号 [] 初始化 std::vector ;怎么了?

python - Kubernetespodoperator如何使用cmds或者cmds和argum