查詢 R 資料框列中每 n 個觀測值的標準差。


為了找到 R 資料框中每 n 個觀測值的標準差,我們可以使用 zoo 包的 rollapply 函式。

例如,如果我們有一個名為 df 的資料框,其中包含一個名為 X 的列,包含 100 個值,那麼我們可以使用以下命令建立一個包含每 10 個值的標準差的列:

df$SD_10<-rep(rollapply(df[,1],width=10,by=10,sd),each=10)

示例 1

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

x<-rpois(20,5)
df1<-data.frame(x)
df1

建立了以下資料框:

    x
1   3
2   5
3   5
4   1
5   5
6   4
7   5
8   5
9   4
10  3
11  4
12  1
13  7
14  2
15  6
16 10
17  5
18  9
19  4
20  4

要載入 zoo 包並查詢上述建立的資料框中 x 中每 5 個值的標準差,請將以下程式碼新增到上述程式碼片段中:

x<-rpois(20,5)
df1<-data.frame(x)
library(zoo)
df1$SD_5<-rep(rollapply(df1[,1],width=5,by=5,sd),each=5)
df1

輸出

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

   x     SD_5
 1 3 1.788854
 2 5 1.788854
 3 5 1.788854
 4 1 1.788854
 5 5 1.788854
 6 4 0.836660
 7 5 0.836660
 8 5 0.836660
 9 4 0.836660
10 3 0.836660
11 4 2.549510
12 1 2.549510
13 7 2.549510
14 2 2.549510
15 6 2.549510
16 10 2.880972
17 5 2.880972
18 9 2.880972
19 4 2.880972
20 4 2.880972

示例 2

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

y<-rnorm(20)
df2<-data.frame(y)
df2

建立了以下資料框:

            y
 1 -0.59258077
 2  0.44336315
 3  1.03389921
 4 -0.50471102
 5 -0.10370441
 6  1.49547406
 7  0.18575630
 8 -0.73030467
 9 -1.15666426
10  1.68174045
11 -0.03226993
12 -0.49435218
13 -1.98371898
14  2.04194072
15  2.44473953
16  0.26519508
17 -0.36658534
18 -0.15745538
19  0.15730767
20  0.91778671

要在上述建立的資料框中查詢 y 中每 4 個值的標準差,請將以下程式碼新增到上述程式碼片段中:

y<-rnorm(20)
df2<-data.frame(y)
df2$SD_4<-rep(rollapply(df2[,1],width=4,by=4,sd),each=4)
df2

輸出

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

       y         SD_4
1  -0.59258077 0.7821571
2   0.44336315 0.7821571
3   1.03389921 0.7821571
4  -0.50471102 0.7821571
5  -0.10370441 0.9373014
6   1.49547406 0.9373014
7   0.18575630 0.9373014
8  -0.73030467 0.9373014
9  -1.15666426 1.2126483
10  1.68174045 1.2126483
11 -0.03226993 1.2126483
12 -0.49435218 1.2126483
13 -1.98371898 2.0195767
14  2.04194072 2.0195767
15  2.44473953 2.0195767
16  0.26519508 2.0195767
17 -0.36658534 0.5628322
18 -0.15745538 0.5628322
19  0.15730767 0.5628322
20  0.91778671 0.5628322

更新於:2021年11月11日

247 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.