разделить вывод на несколько объектов в R автоматически - PullRequest
0 голосов
/ 20 февраля 2020

Я не уверен, возможно ли это, но есть ли способ в R запустить команду и сохранить ее в виде нескольких объектов на основе группы? Например, я написал код, который подсчитывает, сколько сотрудников находится на руководящей должности в зависимости от их отдела.

library(tidyverse)
sample <- tibble(department = c("Admin", "Admin", "Office of President", "Office of President"),
                 sup_status = c("Not Supervisor", "Supervisor", "Not Supervisor", "Supervisor"),
                 n = c(918, 152, 69, 192))

Но то, что я действительно хочу, это вектор процентного отношения супервизоров по отделам. Я могу получить R, чтобы получить один длинный вектор всех процентов:

library(tidyverse)

vector_of_all_percents <- sample %>%
  group_by(department) %>%
  mutate(sum_new = sum(n)) %>%
  rowwise() %>%
  mutate(percent = n/sum_new) %>%
  select(percent) %>%
  as_vector()

vector_of_all_percents
 percent1  percent2  percent3  percent4 
0.8579439 0.1420561 0.2643678 0.7356322 

Мои фактические данные имеют много отделов. Есть ли способ настроить мой приведенный выше код, чтобы заставить R автоматически создавать объекты по отделам, что-то вроде этого:

vector_for_admin
 percent1  percent2
0.8579439 0.1420561 

vector_for_office
percent1  percent2 
0.2643678 0.7356322

Я не уверен, что мне нужны команды slice () или split () или, если это вообще возможно. Любое руководство будет очень ценится!

1 Ответ

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

Вы можете использовать split для создания списка:

library(tidyverse)
sample <- tibble(department =c("Admin", "Admin", "Office of President", "Office of President"),
                 sup_status =c("Not Supervisor", "Supervisor", "Not Supervisor", "Supervisor"),
                 n = c(918, 152, 69, 192))

list_of_all_percents <- sample %>%
  group_by(department) %>%
  mutate(sum_new = sum(n)) %>%
  rowwise() %>%
  mutate(percent = n/sum_new) %>%
  split(.$department)

list_of_all_percents
#> $Admin
#> Source: local data frame [2 x 5]
#> Groups: <by row>
#> 
#> # A tibble: 2 x 5
#>   department sup_status         n sum_new percent
#>   <chr>      <chr>          <dbl>   <dbl>   <dbl>
#> 1 Admin      Not Supervisor   918    1070   0.858
#> 2 Admin      Supervisor       152    1070   0.142
#> 
#> $`Office of President`
#> Source: local data frame [2 x 5]
#> Groups: <by row>
#> 
#> # A tibble: 2 x 5
#>   department          sup_status         n sum_new percent
#>   <chr>               <chr>          <dbl>   <dbl>   <dbl>
#> 1 Office of President Not Supervisor    69     261   0.264
#> 2 Office of President Supervisor       192     261   0.736

Поэтому, если вы хотите получить доступ к процентам для администратора, вы просто делаете

list_of_all_percents$Admin$percent
#> [1] 0.8579439 0.1420561

Создано в 2020-02-20 по представьте пакет (v0.3.0)

...