【问题标题】:partial row-sums in multidimensional arrays多维数组中的部分行和
【发布时间】:2011-04-12 13:22:50
【问题描述】:

我有一个关于如何将 R 函数应用于多维数组的问题。

例如,考虑这个操作,我将一个条目减去其他条目的总和。

ppl["2012",,,,,1] <- ppl["2012",,,,,1]
- ppl["2012",,,,,2] - ppl["2012",,,,,3] - ppl["2012",,,,,4]
- ppl["2012",,,,,5] - ppl["2012",,,,,6] - ppl["2012",,,,,7]
- ppl["2012",,,,,8]

虽然在这种情况下减去单个值可能是可行的,但我更喜欢面向向量的方法。

如果我熟悉多维矩阵代数,我可能会想出在应用时执行必要操作的矩阵,但考虑到所涉及的维数,这太复杂了。

sum(ppl["2012",,,,,2:8]) 不是正确的解决方案,因为sum() 总是返回标量。

我可以使用循环来执行必要的操作,但这与面向向量的编程范式相矛盾。

感谢您的帮助!

编辑:根据 Andrie 的建议,这是原始问题的解决方案: ppl[paste(i),land,,,,1] &lt;- ppl[paste(i),land,,,,1] - apply(ppl[paste(i),land,,,,2:8],c(1,2,3),sum)

【问题讨论】:

  • 你需要使用applysum 来获得你想要的东西。但是,由于您没有提供示例数据,我无法给您确切的代码。

标签: r multidimensional-array


【解决方案1】:

已编辑

以下是使用applysum 返回跨多维表计算的总和的示例:

mat <- array(1:27, dim=c(3, 3, 3))

假设您要计算前两个维度的每个组合的第三个维度的总和。

那么执行此操作的代码变为:

apply(mat, c(1,2), sum)

     [,1] [,2] [,3]
[1,]   30   39   48
[2,]   33   42   51
[3,]   36   45   54

【讨论】:

  • 感谢您的回答!确实,这两个总和是相同的,但我不想减去总和。相反,我想计算每一年、每个国家、每个家庭组成等最后一个维度的值的总和。
  • @Martin Zuba,感谢您的评论。我已修改我的答案以反映这一点。
  • 是的,这就是我需要的!某种求和算法,它将返回比原始集合少一维的结果。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2011-09-05
  • 2013-11-27
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
相关资源
最近更新 更多