【问题标题】:R - cumulative sum by conditionR - 按条件累积总和
【发布时间】:2013-09-20 20:48:04
【问题描述】:

所以我有一个简化的数据集,看起来像这样:

Year    ID     Sum
2009    999    100
2009    123     85
2009    666    100
2009    999    100
2009    123     90
2009    666     85
2010    999    100
2010    123    100
2010    666     95
2010    999     75
2010    123    100
2010    666     85

我想按年份和 ID 添加一个包含累计总和的列。像这样:

Year     ID     Sum    Cum.Sum
2009    999     100        100
2009    123      85         85  
2009    666     100        100  
2009    999     100        200
2009    123      90        175
2009    666      85        185
2010    999     100        100
2010    123     100        100
2010    666      95         95
2010    999      75        175
2010    123     100        200
2010    666      85        180

我认为这应该很简单,但不知何故我无法弄清楚。我该怎么做呢?感谢您的帮助!

【问题讨论】:

  • ...你能分享一下你尝试过的东西以及你看过的地方吗?查看右侧的“相关”部分或尝试搜索R cumulative sum。今后,请在此处发布之前先进行一些研究。

标签: r


【解决方案1】:

使用data.table:

require(data.table)
DT <- data.table(DF)
DT[, Cum.Sum := cumsum(Sum), by=list(Year, ID)]

    Year  ID Sum Cum.Sum
 1: 2009 999 100     100
 2: 2009 123  85      85
 3: 2009 666 100     100
 4: 2009 999 100     200
 5: 2009 123  90     175
 6: 2009 666  85     185
 7: 2010 999 100     100
 8: 2010 123 100     100
 9: 2010 666  95      95
10: 2010 999  75     175
11: 2010 123 100     200
12: 2010 666  85     180

【讨论】:

  • 应该是DT[order(Year), Cum.Sum := cumsum(Sum), by=list(ID)]
【解决方案2】:

另一种方式

1) 使用ddply按组对变量求和(类似于SQL group by)

X <- ddply ( dataset, .(Year,ID), sum)

2) 将结果与数据集合并

Y <- merge( dataset, X, by=('Year','ID')

【讨论】:

    【解决方案3】:

    您可以使用 dplyr,以及基本函数cumsum

    require(dplyr)    
    
    dataset %>% 
      group_by(Year, ID) %>%
      mutate(cumsum = cumsum(Sum)) %>%
      ungroup()
    

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多