【问题标题】:Descriptive Statistics By Group - R按组的描述性统计 - R
【发布时间】:2016-12-12 21:01:56
【问题描述】:

我正在寻找一种在 R 中按组号生成描述性统计信息的方法。我发现了另一个 answer on here,它使用 dplyr,但我遇到了太多问题,想看看有什么替代方案其他人可能会推荐。

我希望获得有关按 group_id 分组的收入的描述性统计数据。假设我有一个名为 company 的数据框:

group_id    company     revenue
1          Company A    200
1          Company B    150
1          Company C    300
2          Company D    600
2          Company E    800
2          Company F    1000
3          Company G    50
3          Company H    80
3          Company H    60

我想制作一个名为 new_company 的新数据框:

group_id    company revenue average min max   SD
1          Company A    200  217    150 300   62
1          Company B    150  217    150 300   62
1          Company C    300  217    150 300   62
2          Company D    600  800    600 1000  163
2          Company E    800  800    600 1000  163
2          Company F    1000 800    600 1000  163
3          Company G    50  63      50  80    12
3          Company H    80  63      50  80    12
3          Company H    60  63      50  80   12

再次,我正在寻找 dplyr 的替代品。谢谢你

【问题讨论】:

    标签: r


    【解决方案1】:

    使用示例数据框

    dd<-read.csv(text="group_id,company,revenue
    1,Company A,200
    1,Company B,150
    1,Company C,300
    2,Company D,600
    2,Company E,800
    2,Company F,1000
    3,Company G,50
    3,Company H,80
    3,Company H,60", header=T)
    

    您可以做一些花哨的事情,例如使用 ave() 为您的不同函数创建每行的所有值,然后将其与原始 data.frame 结合起来。

    ext <- with(dd, Map(function(x) ave(revenue, group_id, FUN=x), 
        list(avg=mean, min=min, max=max, SD=sd)))
    cbind(dd, ext)
    #   group_id   company revenue       avg min  max        SD
    # 1        1 Company A     200 216.66667 150  300  76.37626
    # 2        1 Company B     150 216.66667 150  300  76.37626
    # 3        1 Company C     300 216.66667 150  300  76.37626
    # 4        2 Company D     600 800.00000 600 1000 200.00000
    # 5        2 Company E     800 800.00000 600 1000 200.00000
    # 6        2 Company F    1000 800.00000 600 1000 200.00000
    # 7        3 Company G      50  63.33333  50   80  15.27525
    # 8        3 Company H      80  63.33333  50   80  15.27525
    # 9        3 Company H      60  63.33333  50   80  15.27525
    

    但实际上一个简单的 dplyr 命令会更容易。

    dd %>% group_by(group_id) %>% 
      mutate(
        avg=mean(revenue), 
        min=min(revenue), 
        max=max(revenue), 
        SD=sd(revenue))
    

    【讨论】:

    • 谢谢,弗里克先生。最后一个解决方案有效,我刚刚发现我已经安装了 plyr,这导致它一起错过了 group_by 命令。再次感谢 - 一切顺利。
    【解决方案2】:

    我喜欢使用的另一个函数是:describeBy from package "psych"。

    library(psych)    
    description   <- describeBy(data.frame$variable_to_be_described, df$group_variable)
    

    【讨论】:

      猜你喜欢
      • 2019-06-29
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      • 2018-10-13
      • 1970-01-01
      相关资源
      最近更新 更多