我对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
提前感谢您的帮助。
答案 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)