Я хотел бы вычислить среднее, максимальное, минимальное и стандартное отклонение переменной mpg, но только в интервале квантилей от 5% до 95% mpg на cyl и am внутри набора данных mtcars, а не для всех значений mpg. В моем примере:

library(dplyr)
mtcars %>%
 group_by(cyl,am) %>%
 filter (mpg >= quantile(mpg, 0.05) & mpg <= quantile(mpg, 0.95)) %>% 
 summarise(mean = mean(mpg),
 max = max(mpg),
 min = mean(mpg),
 sd = sd(mpg))

Но я бы тоже хотел, чтобы результаты не выводились в широкоформатном формате с помощью всего одной операции, вывод был примерно таким:

 cly  am  mpg  varType
 <dbl> <dbl> <dbl> <dbl>
1 4 1 28.2 mean
2 4 1 32.4 max
3 4 1 28.2 min
4 4 1 3.53 sd

Пожалуйста, помогите с этим? Заранее спасибо!

1
Leprechault 25 Сен 2021 в 17:35

2 ответа

Лучший ответ

Просто добавьте к своей трубе pivot_longer.

library(tidyverse)
mtcars %>%
 group_by(cyl,am) %>%
 filter (mpg >= quantile(mpg, 0.05) & mpg <= quantile(mpg, 0.95)) %>% 
 summarise(mean = mean(mpg),
 max = max(mpg),
 min = mean(mpg),
 sd = sd(mpg)) %>%
 pivot_longer(-c(cyl,am))
3
deschen 25 Сен 2021 в 14:51

В суммировании вы можете создать тиббл с таким количеством строк и столбцов, сколько вы хотите, чтобы вывод был (при условии, что количество столбцов и типы столбцов совпадают в группах)

library(dplyr, warn.conflicts = FALSE)

mtcars %>%
  group_by(cyl, am) %>%
  filter(mpg >= quantile(mpg, 0.05) & mpg <= quantile(mpg, 0.95)) %>%
  summarise({
    stats <-
      c(
        mean = mean(mpg),
        max = max(mpg),
        min = min(mpg),
        sd = sd(mpg)
      )
    tibble(mpg = stats, varType = names(stats))
  })
#> `summarise()` has grouped output by 'cyl', 'am'. You can override using the `.groups` argument.
#> # A tibble: 20 × 4
#> # Groups:   cyl, am [5]
#>      cyl    am    mpg varType
#>    <dbl> <dbl>  <dbl> <chr>  
#>  1     4     0 22.8   mean   
#>  2     4     0 22.8   max    
#>  3     4     0 22.8   min    
#>  4     4     0 NA     sd     
#>  5     4     1 28.2   mean   
#>  6     4     1 32.4   max    
#>  7     4     1 22.8   min    
#>  8     4     1  3.53  sd     
#>  9     6     0 18.6   mean   
#> 10     6     0 19.2   max    
#> 11     6     0 18.1   min    
#> 12     6     0  0.778 sd     
#> 13     6     1 21     mean   
#> 14     6     1 21     max    
#> 15     6     1 21     min    
#> 16     6     1  0     sd     
#> 17     8     0 14.7   mean   
#> 18     8     0 18.7   max    
#> 19     8     0 10.4   min    
#> 20     8     0  2.57  sd

Создано 25 сентября 2021 года пакетом REPEX (v2.0.1)

1
IceCreamToucan 25 Сен 2021 в 15:04