使用R计算组的累积标准偏差

时间:2016-01-19 10:38:47

标签: r

我对R很新,想要计算R中按组的累积标准偏差。我有一个数据框D,其中有一个访问者ID和页面上的相应时间(顶部),如下所示< / p>

ID   top
v1   2.3  
v1   4.8
v1   10.2
v2   16.2
v2   12.2
v2   14.3
v2   12.4
v3   8.2
v3   8.8

输出需要看起来像这样

ID   top  cum_sd
v1   2.3  
v1   4.8   1.76
v1   10.2  4.03
v2   16.2
v2   12.2  2.82
v2   14.3  2.00
v2   12.4  1.15
v3   8.2   
v3   8.8   0.42

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我们可以使用runSD中的TTR。将'data.frame'转换为'data.table'(setDT(df1)),按'ID'分组,我们在'top'列上应用runSD并分配(:=)输出创建'cum_sd'。

library(data.table)
library(TTR)
setDT(df1)[, cum_sd := round(runSD(top, n=1, cumulative=TRUE),2) ,ID]
df1
#  ID  top cum_sd
#1: v1  2.3     NA
#2: v1  4.8   1.77
#3: v1 10.2   4.04
#4: v2 16.2     NA
#5: v2 12.2   2.83
#6: v2 14.3   2.00
#7: v2 12.4   1.87
#8: v3  8.2     NA
#9: v3  8.8   0.42

答案 1 :(得分:2)

您可以使用基本功能:

cumsd <- function(x) sapply(sapply(seq_along(x), head, x=x), sd)
df1$cum_sd <- ave(df1$top, df1$ID, FUN=cumsd)