【问题标题】:Cumulative Sum of Matrix with Conditions in R [duplicate]R中具有条件的矩阵的累积和[重复]
【发布时间】:2017-07-09 22:28:58
【问题描述】:

我只是想知道如何使用矩阵上的条件计算累积和。这就是我的意思:假设我们有一个矩阵,其中有一列名为 ID 和一列名为 Value,如下所示:

   ID       |      VALUE
------------------------------
   2        |       50
   7        |       19
   5        |       32
   2        |       21
   8        |       56
   7        |       5
   7        |       12
   2        |       16
   5        |       42

我希望根据ID 列计算此矩阵的累积和。这意味着累积和列(或向量)看起来像:

   ID       |      CUMULATIVE SUM
----------------------------------
   2        |       50
   7        |       19
   5        |       32
   2        |       71
   8        |       56
   7        |       24
   7        |       36
   2        |       87
   5        |       74

有没有办法做到这一点?对此的搜索根本没有出现(我找到了与数据框/数据表相关的东西,但是当涉及到矩阵的“条件”时我根本没有找到任何东西),所以任何帮助都会不胜感激。

【问题讨论】:

  • dat[,"VALUE"] <- ave(dat[,"VALUE"], dat[,"ID"], FUN=cumsum) ?
  • 只是为了确认,但等式左侧的dat[,"VALUE"] 应该改为dat[,"CUMULATIVESUM"] 吗?
  • @ThePlowKing - 是的......如果你想把它重命名为别的东西,当然。

标签: r matrix cumulative-sum


【解决方案1】:

有很多方法可以做到这一点,这里我使用data.table。我稍微编辑了您的数据,只使用 , 作为分隔符并去掉了标题行:

R> suppressMessages(library(data.table))
R> dat <- fread("   ID       ,      VALUE
   2        ,       50
   7        ,       19
   5        ,       32
   2        ,       21
   8        ,       56
   7        ,       5
   7        ,       12
   2        ,       16
   5        ,       42")
R> dat[, cumsum(VALUE), by=ID]
   ID V1
1:  2 50
2:  2 71
3:  2 87
4:  7 19
5:  7 24
6:  7 36
7:  5 32
8:  5 74
9:  8 56
R> 

之后,它是一个标准的分组方式(您可以通过多种不同的方式进行)和每个组的累积总和。

由于分组,此处的重新排序是自动的。如果你必须保持你的订单,你可以。

【讨论】:

  • 谢谢!我有一个我之前实现过的 data.table 方法,但是由于我现在正在使用矩阵,所以我不太确定如何实现它
  • 当然。 ave() 是您最好的选择,就像您通过搜索找到的旧问题一样。但是您没有“矩阵”-我认为您有其他格式或后端的数据,并选择将其存储在矩阵中。无论如何...
  • 是的,你猜对了……它实际上是一个 xts 对象,我的很多困惑都源于此:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2022-12-05
  • 2018-08-09
  • 2019-10-16
  • 2018-05-02
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多