Стандартная оценка с mutate_ для расчета процентов по группам

Я пытаюсь использовать стандартную оценку с dplyr рассчитать проценты как функцию двух группирующих переменных. Проблема в моем mutate_ statement,

Вот набор данных:

structure(list(
    var1 = structure(c(2L, 1L, 1L, 2L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 
    2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 
    2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 
    1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 
    2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L
    ), 
    .Label = c("No", "Yes"), class = "factor"), 
    var2 = structure(c(2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 
    1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 
    1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 
    2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 
    2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 
    1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L
    ), 
    .Label = c("Female", "Male"), class = "factor")), 
    .Names = c("var1", "var2"), row.names = c(NA, -100L), class = "data.frame")

Вот код, с которым я работаю:

for_plots = function(data, var1, var2){
  grouped_data = data %>% group_by_(var1, var2) %>% 
  summarise_(n_in_group = ~n()) %>% 
  mutate_(.dots = setNames(list(
    interp(quote(n_in_group / sum(n_in_group, na.rm = TRUE) * 100),
           n_in_group = as.name(n_in_group)))
    ))
  return(grouped_data)
}

Когда я запускаю код, я получаю сообщение об ошибке:

Ошибка в setNames(список (interp (цитата (n_in_group/sum(n_in_group, na.rm = TRUE)) *: аргумент "nm" отсутствует, без значения по умолчанию

Какие-нибудь мысли?

1 ответ

Решение

Вот код, основанный на ответе @Frank:

for_plots = function(data, var1, var2) { 
   grouped_data = data %>% group_by_(var1, var2) %>% 
     summarise_(n_in_group = ~n()) %>% 
     mutate(percent = (n_in_group / sum(n_in_group, na.rm = TRUE)) * 100) 
   return(grouped_data) 
} 
Другие вопросы по тегам