【问题标题】:Summary table by group in RR中的分组汇总表
【发布时间】:2014-02-12 19:34:55
【问题描述】:

考虑以下数据框:

 df <- data.frame(group = c("group1", "group1", "group2", "group2", "group2", "group3"), factor = paste("factor", 1:6, sep=""), vol = seq(from = 0.02, length.out = 6, by = 0.02))

第一列为第二列中的每个因素定义了一个顶级组。第三列是每个因子的标准差值。

我想生成一个仅包含组的汇总表,每个组的标准差定义为:

  • 如果group1包含因子f1和f2,vol(f1)和vol(f2)分别是因子f1和f2的标准差,那么group1的标准差为:

    std(group1) = sqrt[vol(f1)^2 + vol(f2)^2]

是否有任何简单的方法可以创建汇总表,其中每个组的vol 是使用此自定义函数计算的?

任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我可以提出一个使用ddply函数的解决方案吗:

    # require(plyr)
    ddply(df, .(group), summarize, std = sqrt(sum(vol^2)))
    
    #    group        std
    # 1 group1 0.04472136
    # 2 group2 0.14142136
    # 3 group3 0.12000000
    

    【讨论】:

    • @Mariam,感谢您接受我的回答。为了给你更多的视角,我意识到plyr 与@andyteucher 提出的dplyr 包有关。后者可能在较大的数据帧中表现更好 (reference)。
    【解决方案2】:

    良好测量的基本解决方案。

    by(df,df$group,function(x) sqrt(sum(x$vol^2)))
    

    如果你想让它看起来更漂亮:

    as.table(df,df$group,function(x) sqrt(sum(x$vol^2))))
    
    df$group
        group1     group2     group3 
    0.04472136 0.14142136 0.12000000 
    

    【讨论】:

      【解决方案3】:

      使用令人惊叹的新 dplyr 包,我认为这就是您正在寻找的:

      require(dplyr)
      
      df <- data.frame(group = c("group1", "group1", "group2", "group2", "group2", "group3"), 
                       factor = paste("factor", 1:6, sep=""), 
                       vol = seq(from = 0.02, length.out = 6, by = 0.02))
      
      df %.% group_by(group) %.% summarise(grp_std=sqrt(sum(vol^2)))
      
      # Source: local data frame [3 x 2]
      
      #    group    std_dev
      # 1 group1 0.04472136
      # 2 group2 0.14142136
      # 3 group3 0.12000000
      

      使用%.% 的链接语法需要一点时间来适应,但它变得非常直观。替代语法:

      df_grouped <- group_by(df, group)
      
      summarise(df_grouped, grp_std=sqrt(sum(vol^2)))
      

      【讨论】:

        【解决方案4】:

        我可以从基本包stats 中推荐aggregate(),尽管您必须先定义一个新函数。

        ss<-function(x){sqrt(sum(x^2))}
        aggregate(vol~group,data=df,FUN=ss)
        

        【讨论】:

          猜你喜欢
          • 2015-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多