查找 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 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告