arrays - 根据维度名称聚合数组

标签 arrays r matrix aggregate

我正在尝试以有效的方式根据维度名称聚合数组。

ex_array <- array(1:10000, dim = c(100, 10, 10),
                  dimnames = list(Col1 = c(rep(10,50), rep(20, 50)),
                                  Col2 = 1:10,
                                  Col3 = 1:10))

现在我想根据第一个维度的名称聚合这个数组。该维度有 2 个不同的名称(10 和 20),因此新数组的维度应为 2 x 10 x 10。维度名称 1 等于 10 的所有值应相加,维度 1 等于 20 的值应求和进行总结。

有什么聪明的方法可以做到这一点吗?

最佳答案

reshape2。我认为 reshape2 是最适合这里的,如果您愿意使用包:

library(reshape2)
res = acast(melt(ex_array), Col1 ~ Col2 ~ Col3, fun.aggregate = sum)

str(res)
#  int [1:2, 1:10, 1:10] 1275 3775 6275 8775 11275 13775 16275 18775 21275 23775 ...
#  - attr(*, "dimnames")=List of 3
#   ..$ : chr [1:2] "10" "20"
#   ..$ : chr [1:10] "1" "2" "3" "4" ...
#   ..$ : chr [1:10] "1" "2" "3" "4" ...

我认为这也会折叠其他维度名称中的重复项(如果有的话)。


base R。您可以使用rowsum,但它在这里很笨重,因为它是为矩阵设计的

res2 = array(, c(2, 10, 10), dimnames = lapply(dimnames(ex_array), unique))
res2[] = sapply(seq_len(dim(ex_array)[3]), function(k) 
  rowsum(ex_array[,,k], rownames(ex_array[,,k])))

关于arrays - 根据维度名称聚合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36978155/

相关文章:

c++ - 在排序和旋转的数组中搜索

仅当它是 R 中的特定字符时才替换字符串中的第 n 个字符

c - 矩阵乘法

mysql - 循环表中数字列的总计(不是查询的总计)

c++ - 检索16k键-值对的最快方法?

R: strptime() 和 is.na() 意外的结果

python - numpy.array 形状 (R, 1) 和 (R,) 之间的区别

arrays - 根据部分填充的向量形成 'partial' 单位矩阵

c++ - 可视化多维数组如何放置在内存中的方法?

r - 如何在 R 中的单个图中使用多种颜色?