如何计算R中一列下的数据子集的标准偏差

Emi*_*ily 4 r standard-deviation

我想计算从第一个观察到最后一个观察的一列中每4个值的标准偏差.我已经找到了许多移动SD功能的答案,但我只需要一行代码来计算sd()每4个数据值,并将答案写入数据框中的新列,如下所示:

示例数据:

Obs Count
1   56
2   29
3   66
4   62
5   49
6   12
7   65
8   81
9   73
10  66
11  71
12  59
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Obs Count SD
1   56    16.68
2   29    16.68
3   66    16.68
4   62    16.68
5   49    29.55
6   12    29.55
7   65    29.55
8   81    29.55
9   73    6.24
10  66    6.24
11  71    6.24
12  59    6.24
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但这显然是不正确的:

a <- for(i in 1: length(df)) sd(df$Count[i:(i+3)])
Run Code Online (Sandbox Code Playgroud)

这应该是一项非常简单的任务,但我无法找到答案.我还在学习,任何帮助将不胜感激.

A5C*_*2T1 7

在基数R中,您可以使用以下内容创建"每4行"的索引:

(seq_len(nrow(mydf))-1) %/% 4
# [1] 0 0 0 0 1 1 1 1 2 2 2 2
Run Code Online (Sandbox Code Playgroud)

使用它,您可以使用ave获得所需的结果:

mydf$SD <- ave(mydf$Count, (seq_len(nrow(mydf))-1) %/% 4, FUN = sd)
mydf
#    Obs Count        SD
# 1    1    56 16.680827
# 2    2    29 16.680827
# 3    3    66 16.680827
# 4    4    62 16.680827
# 5    5    49 29.545163
# 6    6    12 29.545163
# 7    7    65 29.545163
# 8    8    81 29.545163
# 9    9    73  6.238322
# 10  10    66  6.238322
# 11  11    71  6.238322
# 12  12    59  6.238322
Run Code Online (Sandbox Code Playgroud)