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
我有一个 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