[英]How to add totals as well as group_by statistics in R
當計算使用任何統計summarise
和group_by
我們只能得到每類的匯總統計,而不是所有的人口(總)的值。 如何獲得兩者?
我正在尋找干凈整潔的東西。 到目前為止,我只能想到:
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")
)
但是我想要更緊湊的東西。 特別是,我不想鍵入兩次代碼(用於摘要),每個組一次,總計一次。
如果解開要嘗試的操作,則可以簡化它:您擁有包含多種物種的iris
數據,並且希望將其與所有物種的數據一起匯總。 綁定之前,無需計算這些摘要統計信息。 而是將iris
與設置為Species = "Total"
的iris
版本綁定,然后進行分組和匯總。
library(tidyverse)
bind_rows(
iris,
iris %>% mutate(Species = "Total")
) %>%
group_by(Species) %>%
summarise(Mean = mean(Sepal.Width),
Median = median(Sepal.Width),
sd = sd(Sepal.Width),
p10 = quantile(Sepal.Width, probs = 0.1))
#> # A tibble: 4 x 5
#> Species Mean Median sd p10
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa 3.43 3.4 0.379 3
#> 2 Total 3.06 3 0.436 2.5
#> 3 versicolor 2.77 2.8 0.314 2.3
#> 4 virginica 2.97 3 0.322 2.59
我喜歡上面的評論中的注意事項,盡管我必須進行足夠的這種計算才能在個人軟件包中使用類似的速記功能。 對於諸如標准偏差之類的事情來說,這可能沒有什么意義,但是我需要做很多事來增加人口統計總數等。(如果有用,該函數在此處 )。
有點短,盡管與bind_rows非常相似
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()
可能更干凈:
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")
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.