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)
这应该是一项非常简单的任务,但我无法找到答案.我还在学习,任何帮助将不胜感激.
在基数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)