如何在R資料框中查詢每一行的累積和?


要在R資料框中查詢每一行的累積和,我們需要將資料框讀取為data.table物件,然後使用Reduce函式及其accumulate引數。

例如,如果我們有一個名為df的資料框,並且我們想查詢df中每一行的累積和,那麼我們可以使用以下命令:

setDT(df)[,names(df):=Reduce("+",df,accumulate=TRUE)]

示例1

以下程式碼片段建立一個示例資料框:

x1<-sample(1:50,20)
x2<-sample(1:50,20)
x3<-sample(1:50,20)
df1<-data.frame(x1,x2,x3)
df1

建立了以下資料框

  x1  x2 x3
 1 6  19 3
 2 28 46 5
 3 17 3  16
 4 16 44 25
 5 50 26 14
 6 40 16 11
 7 21 8  48
 8 19 9  27
 9 37 43 1
10 34 33 15
11 4  17 50
12 48 25 44
13 31 18 12
14 7  13 9
15 12 6  8
16 22 2  4
17 23 23 41
18 11 37 19
19 49 7  13
20 3  4  49

要載入data.table包並在上述建立的資料框df1上查詢每一行的累積和,請將以下程式碼新增到上述程式碼片段中:

x1<-sample(1:50,20)
x2<-sample(1:50,20)
x3<-sample(1:50,20)
df1<-data.frame(x1,x2,x3)
library(data.table)
setDT(df1)[,names(df1):=Reduce("+",df1,accumulate=TRUE)]
df1

輸出

如果您將上述所有程式碼片段作為單個程式執行,它將生成以下輸出:

   x1  x2 x3
 1: 6  25 28
 2: 28 74 79
 3: 17 20 36
 4: 16 60 85
 5: 50 76 90
 6: 40 56 67
 7: 21 29 77
 8: 19 28 55
 9: 37 80 81
10: 34 67 82
11: 4  21 71
12: 48 73 117
13: 31 49 61
14: 7  20 29
15: 12 18 26
16: 22 24 28
17: 23 46 87
18: 11 48 67
19: 49 56 69
20: 3  7  56

示例2

以下程式碼片段建立一個示例資料框:

y1<-round(rnorm(20),0)
y2<-round(rnorm(20),0)
y3<-round(rnorm(20),0)
df2<-data.frame(y1,y2,y3)
df2

建立了以下資料框

  y1  y2 y3
 1  0  1  1
 2 -1 -1  1
 3  1 -1 -1
 4  0  0  0
 5 -1  0  0
 6  0 -2  0
 7 -1  0  0
 8  1  0 -1
 9  0  0  2
10  1  0  0
11 -1  0 -1
12 -1  0 -1
13  1  0  1
14  0 -2  0
15 -1  0  0
16 -1  1 -1
17 -1 -1 -1
18  0  0 -1
19  0 -1  1
20  0 -1 -1

要在上述建立的資料框df2上查詢每一行的累積和,請將以下程式碼新增到上述程式碼片段中:

y1<-round(rnorm(20),0)
y2<-round(rnorm(20),0)
y3<-round(rnorm(20),0)
df2<-data.frame(y1,y2,y3)
setDT(df2)[,names(df2):=Reduce("+",df2,accumulate=TRUE)]
df2

輸出

如果您將上述所有程式碼片段作為單個程式執行,它將生成以下輸出:

    y1 y2 y3
 1:  0  1  2
 2: -1 -2 -1
 3:  1  0 -1
 4:  0  0  0
 5: -1 -1 -1
 6:  0 -2 -2
 7: -1 -1 -1
 8:  1  1  0
 9:  0  0  2
10:  1  1  1
11: -1 -1 -2
12: -1 -1 -2
13:  1  1  2
14:  0 -2 -2
15: -1 -1 -1
16: -1  0 -1
17: -1 -2 -3
18:  0  0 -1
19:  0 -1  0
20:  0 -1 -2

更新於:2021年11月9日

889 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告