Получение сводки по группам и в целом с использованием Tidyverse - PullRequest
3 голосов
/ 27 февраля 2020

Я пытаюсь найти способ получить сводную статистику, такую ​​как средние значения по группам и в целом, за один шаг, используя dplyr

#Data set-up
sex <- sample(c("M", "F"), size=100, replace=TRUE)
age <- rnorm(n=100, mean=20 + 4*(sex=="F"), sd=0.1)
dsn <- data.frame(sex, age)


library("tidyverse")

#Using dplyr to get means by group and overall
mean_by_sex <- dsn %>% 
  group_by(sex) %>% 
  summarise(mean_age = mean(age))

mean_all <- dsn %>% 
  summarise(mean_age = mean(age)) %>% 
  add_column(sex = "All")

#combining the results by groups and overall
final_result <- rbind(mean_by_sex, mean_all)
final_result  
#> # A tibble: 3 x 2
#>   sex   mean_age
#>   <fct>    <dbl>
#> 1 F         24.0
#> 2 M         20.0
#> 3 All       21.9
#This is the table I want but I wonder if is the only way to do this

Есть ли способ сделать это на более коротком этапе, используя group_by_at или group_by_all или аналогичные функции с использованием Tidyverse и dplyr Любая помощь будет принята с благодарностью

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Небольшое переключение тоже может сделать это.

final_result <- dsn %>% 
  add_row(sex = "All", age = mean(age)) %>% 
  group_by(sex) %>% 
  summarise(mean_age = mean(age))
2 голосов
/ 27 февраля 2020

Один из вариантов может быть:

dsn %>%
 group_by(sex) %>%
 summarise(mean_age = mean(age)) %>%
 add_row(sex = "ALL", mean_age = mean(dsn$age))

  sex   mean_age
  <fct>    <dbl>
1 F         24.0
2 M         20.0
3 ALL       21.9
...