【问题标题】:Calculating cumulative standard deviation by group using R使用 R 按组计算累积标准偏差
【发布时间】:2016-04-24 19:06:16
【问题描述】:

我对 R 很陌生,想在 R 中按组计算累积标准差。我有一个数据框 D,它有一个访问者的 ID,以及在每个页面上花费的相应页面(顶部)时间,如下所示

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

提前感谢您的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以从TTR 使用runSD。将“data.frame”转换为“data.table”(setDT(df1)),按“ID”分组,我们在“顶部”列上应用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
    

    【讨论】:

      【解决方案2】:

      您可以使用基本功能来做到这一点:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        • 2020-09-18
        • 2023-03-18
        相关资源
        最近更新 更多