我正在尝试以有效的方式根据维度名称聚合数组。
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/