首页 文章

如何按组获取摘要统计信息

提问于
浏览
45

我试图在R / S-PLUS中一次性按分类列分组获得多个汇总统计信息 . 我找到了几个函数,但是每个函数都会执行一次统计,比如`aggregate() .

data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66, 
          71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59)
grp <- factor(rep(LETTERS[1:4], c(4,6,6,8)))
df <- data.frame(group=grp, dt=data)
mg <- aggregate(df$dt, by=df$group, FUN=mean)    
mg <- aggregate(df$dt, by=df$group, FUN=sum)

我正在寻找的是在一次通话中获得同一组的多个统计数据,如mean,min,max,std,...等,这是可行的吗?

9 回答

  • 75

    我会为 tapply() 投入两美分 .

    tapply(df$dt, df$group, summary)
    

    您可以编写一个自定义函数,其中包含要替换摘要的特定统计信息 .

  • 1

    dplyr 包可能是这个问题的不错替代方案:

    library('dplyr')
    df %>% group_by(group) %>% summarize(mean=mean(dt), sum=sum(dt))
    
  • 5

    使用Hadley Wickham的purrr包这很简单 . 使用 split 将传递的 data_frame 拆分为组,然后使用 mapsummary 函数应用于每个组 .

    library(purrr)
    
    df %>% split(.$group) %>% map(summary)
    
  • 29

    psych 包中's many different ways to go about this, but I' m偏向 describeBy

    describeBy(df$dt, df$group, mat = TRUE)
    
  • 3

    看一下 plyr 包 . 具体来说, ddply

    ddply(df, .(group), summarise, mean=mean(dt), sum=sum(dt))
    
  • 3

    describeBy 外, doBy 包是另一种选择 . 它提供了SAS PROC SUMMARY的大部分功能 . 详情:http://www.statmethods.net/stats/descriptives.html

  • 18

    我刚刚发现了一个很棒的R包tables . 您可以根据需要按照多个类别对数据进行制表,并计算多个变量的多个统计数据 - 这真是太棒了!

    但等等,还有更多!该软件包具有为表生成LaTeX代码的功能,以便于导入到您的文档中 .

  • 11

    经过5年的漫长岁月,我肯定不会对这个答案给予太多的关注,但仍然要完成所有选项,这里是 data.table

    library(data.table)
    setDT(df)[ , list(mean_gr = mean(dt), sum_gr = sum(dt)) , by = .(group)]
    #   group mean_gr sum_gr
    #1:     A      61    244
    #2:     B      66    396
    #3:     C      68    408
    #4:     D      61    488
    
  • 10

    首先,它取决于您的R版本 . 如果您已通过2.11,则可以将aggreggate与多个结果函数(摘要,实例或您自己的函数)一起使用 . 如果没有,你可以使用贾斯汀的答案 .

相关问题