如何在R中按统计数据添加总计和组_

如何在R中按统计数据添加总计和组_,r,dplyr,totals,split-apply-combine,R,Dplyr,Totals,Split Apply Combine,当使用summary和groupby计算任何统计数据时,我们只得到每个类别的汇总统计数据,而不是所有人群(总数)的值。如何两者兼得 我在找干净短的东西。到目前为止,我只能想到: bind_rows( iris %>% group_by(Species) %>% summarise( "Mean" = mean(Sepal.Width), "Median" = median(Sepal.Width), "sd" = sd(Sepal.Width),

当使用
summary
groupby
计算任何统计数据时,我们只得到每个类别的汇总统计数据,而不是所有人群(总数)的值。如何两者兼得

我在找干净短的东西。到目前为止,我只能想到:

bind_rows( 
  iris %>% group_by(Species) %>% summarise(
    "Mean" = mean(Sepal.Width), 
    "Median" = median(Sepal.Width), 
    "sd" = sd(Sepal.Width), 
    "p10" = quantile(Sepal.Width, probs = 0.1))
  , 
  iris %>% summarise(
    "Mean" = mean(Sepal.Width), 
    "Median" = median(Sepal.Width), 
    "sd" = sd(Sepal.Width), 
    "p10" = quantile(Sepal.Width, probs = 0.1)) %>% 
  mutate(Species = "Total")
  )

但我想要更紧凑的。特别是,我不想键入两次代码(用于汇总),一次用于每组,一次用于总计。

稍微短一点,但与bind\u行非常相似

    q10 <- function(x){quantile(x , probs=0.1)}

    iris %>% 
      select(Species,Sepal.Width)%>%
      group_by(Species) %>% 
      summarise_all(c("mean", "sd", "q10")) %>% 
      t() %>% 

      cbind(c("total", iris %>% select(Sepal.Width) %>% summarise_all(c("mean", "sd", "q10")))) %>% 
      t()

如果你解开你想做的事情,你可以简化它:你有
iris
数据,其中有几个物种,你想把它们和所有物种的数据一起汇总。在绑定之前,不需要计算这些摘要统计信息。相反,使用设置为
Species=“Total”
iris
版本绑定
iris
,然后分组并汇总

库(tidyverse)
绑定行(
艾里斯,
虹膜%>%突变(物种=“总数”)
) %>%
组别(种类)%>%
总结(平均值=平均值(萼片宽度),
中位数=中位数(萼片宽度),
sd=sd(萼片宽度),
p10=分位数(萼片宽度,probs=0.1))
#>#A tibble:4 x 5
#>物种平均中位数sd p10
#>             
#>1 setosa 3.43 3.4 0.379 3
#>2总计3.06 3 0.436 2.5
#>3 versicolor 2.77 2.8 0.314 2.3
#>4弗吉尼亚州2.97 3 0.322 2.59

我喜欢上面评论中的谨慎,尽管我必须做这种计算,因为我的工作足够多,我在个人软件包中有类似的速记功能。对于标准差之类的东西来说,它可能没有什么意义,但我需要做很多事情来计算人口统计组的总数等(如果有用的话,这个函数就是)。

我知道这是表示某些信息的常用方法,但一般来说,这是一种糟糕的信息存储方式,因为第四行是“非常不同的野兽”从第1-3行开始。我只是想把这个警告说出来…我相信你的代码只计算了每个平均值一次;你的意思是你不想输入两次代码,每组一次,总共一次?@DanY:同意,非常感谢你的机智和认识,不同的人和环境有不同的需求,这是一个很好的例子,说明如何友好相处。是的@Aaron。谢谢将进行编辑以反映您的评论。标题用词不当,实际上是“如何计算整个未分组数据集的汇总统计数据,并连接总计”谢谢@camille!。迄今为止最好的答案。我得到的评论是,这种计算需要低效地存储信息,但我仍然感到惊讶的是,没有标准函数来执行这种类型的分析。这使得说服Stata用户切换变得更加困难。
  bind_rows( 
    iris %>% 
      group_by(Species) %>%  
      select(Sepal.Width)%>%
      summarise_all(c("mean", "sd", "q10"))
    , 
    iris %>% 
      select(Sepal.Width)%>%
      summarise_all(c("mean", "sd", "q10")) %>% 
      mutate(Species = "Total")
  )