如何在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")
)