【问题标题】:R cumulative sum based upon other columnsR 基于其他列的累积总和
【发布时间】:2015-06-02 23:23:01
【问题描述】:

我有一个如下的data.frame。数据按 txt 列排序,然后按 val 列排序。 summ 列是 val 列中的值之和,如果当前行和前面的行在 txt 列中具有相同的值,则来自前面行的 summ 列值......我怎么能在 R 中做到这一点?

txt=c(rep("a",4),rep("b",5),rep("c",3))
val=c(1,2,3,4,1,2,3,4,5,1,2,3)
summ=c(1,3,6,10,1,3,6,10,15,1,3,6)
dd=data.frame(txt,val,summ)
> dd
   txt val summ
1    a   1    1
2    a   2    3
3    a   3    6
4    a   4   10
5    b   1    1
6    b   2    3
7    b   3    6
8    b   4   10
9    b   5   15
10   c   1    1
11   c   2    3
12   c   3    6

【问题讨论】:

  • 我不认为在标题中留下“条件”这个词是有帮助的。你显然想要一个“累积”的总和。如果我对此有误,请随时更正我的编辑。

标签: r cumulative-sum


【解决方案1】:

如果“最早”(在英语中更恰当地写成“最早”)是指最近的,这是您的预期输出所暗示的,那么您在说什么是累积和。您可以将cumsum() 分别应用于txt 的每组ave()

dd <- data.frame(txt=c(rep("a",4),rep("b",5),rep("c",3)), val=c(1,2,3,4,1,2,3,4,5,1,2,3) );
dd$summ <- ave(dd$val,dd$txt,FUN=cumsum);
dd;
##    txt val summ
## 1    a   1    1
## 2    a   2    3
## 3    a   3    6
## 4    a   4   10
## 5    b   1    1
## 6    b   2    3
## 7    b   3    6
## 8    b   4   10
## 9    b   5   15
## 10   c   1    1
## 11   c   2    3
## 12   c   3    6

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多