使用R计算分组累积标准差

3
我对R还比较陌生,想在R中按组计算累积标准差。我有一个数据框D,其中包含每个访问者的ID和相应页面上停留的时间(top),如下所示。
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个回答

5
我们可以使用TTR中的runSD。将'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

4
您可以使用基础函数来完成此操作:
cumsd <- function(x) sapply(sapply(seq_along(x), head, x=x), sd)
df1$cum_sd <- ave(df1$top, df1$ID, FUN=cumsd)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接