R 基于其他列的累加和

R cumulative sum based upon other columns

我有一个 data.frame 如下。数据按列 txt 排序,然后按列 val 排序。 summ 列是 val colummn 中的值与前面行的 summ 列值的总和,前提是当前行和前面的行在 txt 列中具有相同的值...我怎么能在 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

如果"most earlier"(英文写得更恰当"earliest")你的意思是最近的,这就是你的预期输出所暗示的,那么你所说的就是一个累计和。您可以申请 cumsum() separately to each group of txt with 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