如何在R資料框中查詢因子水平的累積和?


累積和主要用於資料的描述性分析,但有時我們可能希望在理解時間序列分析的移動和時計算它們,但這非常罕見。如果我們在R資料框中有一個因子列,那麼對所有因子水平一起查詢累積和是沒有意義的,我們必須為每個水平查詢累積和。這可以使用ave函式輕鬆完成。

示例

考慮下面的資料框:

 線上演示

set.seed(15)
x1<-as.factor(sample(LETTERS[1:3],20,replace=TRUE))
x2<-rpois(20,5)
df1<-data.frame(x1,x2)
df1

輸出

  x1 x2
1  A 5
2  C 6
3  B 2
4  B 3
5  A 8
6  B 5
7  A 5
8  A 3
9  C 5
10 A 2
11 C 5
12 B 6
13 A 2
14 A 5
15 A 4
16 C 6
17 B 8
18 A 5
19 B 8
20 B 3

查詢不同x1值的x2值的累積和:

示例

df1$CumSum_x2_based_on_x1<-ave(x2,x1,FUN=cumsum)
df1

輸出

  x1 x2 CumSum_x2_based_on_x1
1  A 5    5
2  C 6    6
3  B 2    2
4  B 3    5
5  A 8    13
6  B 5    10
7  A 5    18
8  A 3    21
9  C 5    11
10 A 2    23
11 C 5    16
12 B 6    16
13 A 2    25
14 A 5    30
15 A 4    34
16 C 6    22
17 B 8    24
18 A 5    39
19 B 8    32
20 B 3    35

讓我們看看另一個例子:

示例

 線上演示

Group<-sample(c("GRP1","GRP2","GRP3","GRP4"),20,replace=TRUE)
Response<-sample(1:10,20,replace=TRUE)
df2<-data.frame(Group,Response)
df2

輸出

 Group Response
1  GRP2    1
2  GRP3    1
3  GRP2    8
4  GRP2    1
5  GRP2    4
6  GRP1    7
7  GRP1    8
8  GRP1    2
9  GRP1    1
10 GRP1    1
11 GRP4    3
12 GRP3    9
13 GRP4    4
14 GRP1    9
15 GRP4    5
16 GRP2    8
17 GRP2    10
18 GRP3    5
19 GRP3    8
20 GRP3    8

查詢不同Group值的Response值的累積和

示例

df2$CumSum_of_GroupLevels<-ave(Response,Group,FUN=cumsum)
df2

輸出

  Group Response CumSum_of_GroupLevels
1  GRP2    1       1
2  GRP3    1       1
3  GRP2    8       9
4  GRP2    1       10
5  GRP2    4       14
6  GRP1    7       7
7  GRP1    8       15
8  GRP1    2       17
9  GRP1    1       18
10 GRP1    1       19
11 GRP4    3       3
12 GRP3    9       10
13 GRP4    4       7
14 GRP1    9       28
15 GRP4    5       12
16 GRP2    8       22
17 GRP2    10       32
18 GRP3    5       15
19 GRP3    8       23
20 GRP3    8       31

更新於:2020年10月17日

491 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告