首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为行组创建具有聚合值的矩阵

为行组创建具有聚合值的矩阵
EN

Stack Overflow用户
提问于 2017-04-11 19:12:30
回答 1查看 62关注 0票数 0

我有一个巨大的矩阵,包含从显微细胞图像中提取的各种特征。不同的特性分布在各个列之间,单个单元格分布在矩阵的各个行上。然而,这些测量来自时间推移显微镜,例如每个单个细胞在这个矩阵中有90行(时间点)。因此这个矩阵有维数cell_amount*90;feature_amount。

我的目标是:

  • 计算每个单元的后续时间点的差值(时间序列的“导数”),然后
  • 创建一个包含每个单元格差异聚合的新矩阵(因此新矩阵具有维度cell_amount;feature_amount)。

我在R中设置了一些代码来测试我的问题,其中我有4个单元格,4个特性(列),每个单元格有3个时间点值。第一个单元格位于第1-3行,第二个单元格位于第4-6行,依此类推。由此,我计算了值的差异:

代码语言:javascript
复制
A <- matrix(sample(1:100, 4*12), ncol = 4)
B <- abs( A - dplyr::lag(A) )
B[seq(1,nrow(B), 3),] <- NA

这导致一个矩阵,其中每个单元格的第一行包含NA值:

代码语言:javascript
复制
       [,1] [,2] [,3] [,4]
[1,]    NA   NA   NA   NA
[2,]    82   29   54   22
[3,]    32   44   18   31
[4,]    NA   NA   NA   NA
[5,]    22   61   10   33
[6,]    19   64   54   35
[7,]    NA   NA   NA   NA
[8,]    59   18    6   10
[9,]    34   47   70    6
[10,]   NA   NA   NA   NA
[11,]   60   23   68   22
[12,]   17   13   12    9

结果矩阵包含每个单元格的这些值的聚合,在本例中是方差,然后如下所示:

代码语言:javascript
复制
       [,1]   [,2]  [,3]  [,4]
[1,]    1250  112.5 648   40.5
[2,]    4.5   4.5   968   2
[3,]    312.5 420.5 2048  8
[4,]    924.5 50    1568  84.5

如何在R中计算这个新矩阵?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-12 14:49:07

因为你使用了一个没有种子的随机样本,所以我不能重新创建你的A矩阵。然而,这里是您的B矩阵的重新创建。

代码语言:javascript
复制
B <- matrix(scan(text="
NA   NA   NA   NA
82   29   54   22
32   44   18   31
NA   NA   NA   NA
22   61   10   33
19   64   54   35
NA   NA   NA   NA
59   18    6   10
34   47   70    6
NA   NA   NA   NA
60   23   68   22
17   13   12    9"), ncol=4, byrow=T)

如果你真的想要保持这个矩阵,你可以把它重新组合成一个多维数组,然后在边距上应用,得到感兴趣的值,例如

代码语言:javascript
复制
apply(array(B, dim=c(3,4,4)),2:3, var, na.rm=T)
#        [,1]  [,2] [,3] [,4]
# [1,] 1250.0 112.5  648 40.5
# [2,]    4.5   4.5  968  2.0
# [3,]  312.5 420.5 2048  8.0
# [4,]  924.5  50.0 1568 84.5

您还可以创建一个适当的分组变量并使用aggregate()

代码语言:javascript
复制
row_sample <- rep(1:3, each=nrow(B)/3)
aggregate(B, list(row_sample), var, na.rm=T)
#   Group.1        V1       V2        V3        V4
# 1       1 1250.0000 112.5000  648.0000  40.50000
# 2       2  496.3333 662.3333  709.3333 193.00000
# 3       3  469.0000 305.3333 1084.0000  72.33333
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43354392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档