Создать пользовательскую функцию преобразования данных dplyr в R - PullRequest
0 голосов
/ 06 мая 2018

Мне нужно многократно повторять операцию для разных комбинаций двух разных переменных (пытаясь создать данные для столбцов с накоплением, показывающих процент. Может ли кто-нибудь превратить приведенный ниже код в функцию (набора данных и двух переменных x и y) ), чтобы быстро создавать новые наборы данных? Или дайте мне хорошую ссылку или ссылку для изучения функций и dplyr. Спасибо.

 dat = df %>% 
   select(x, y) %>% 
   group_by(x, y) %>% 
   summarise(n = n()) %>% 
   mutate(percentage = round(n/sum(n)*100, 1)) %>% 
   ungroup() %>% 
   group_by(x) %>% 
   mutate(pos = cumsum(percentage) - (0.5 * percentage)) %>% 
   ungroup()  
   return(dat)

1 Ответ

0 голосов
/ 06 мая 2018

Как указано в комментариях выше, пошаговые объяснения можно найти здесь: dplyr.tidyverse.org / article / software.html В этом руководстве дается объяснение функции quo() и символов !!.

Для вашего примера вы можете создать такую ​​функцию:

df1<- data.frame(x1 = c(rep(3,5), rep(7,2)), 
                y1 = c(rep(2,4), rep(5,3)))

my.summary <- function(df, x, y){
  df %>% 
    select(!!x, !!y) %>% 
    group_by(!!x, !!y) %>% 
    summarise(n = n()) %>%
    mutate(percentage = round(n/sum(n)*100, 1)) %>% 
    ungroup() %>% 
    group_by(!!x) %>% 
    mutate(pos = cumsum(percentage) - (0.5 * percentage)) %>% 
    ungroup() 
}

my.summary(df1, quo(x1), quo(y1))

# # A tibble: 3 x 5
#    x1    y1     n percentage   pos
# <dbl> <dbl> <int>      <dbl> <dbl>
#   1     3     2     4         80    40
#   2     3     5     1         20    90
#   3     7     5     2        100    50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...