Написание функции dplyr для передачи в group_map - PullRequest
1 голос
/ 16 мая 2019

Рассматриваемая проблема заключается в применении функции f к каждой группе тиббла. Это более простой способ сделать это, но я бы хотел решить проблему с помощью функции group_map().

Используемые данные : звездные войны пакета dplyr .

Мне нужно получить среднее значение переменной высота для сгруппированного тиббла, учитывая переменные пол и виды . Я знаю, что проблему легко решить, выполнив:

starwars %>% group_by(gender, species) %>% 
  summarise(mean = mean(height, na.rm = TRUE))

Однако я хочу реализовать функцию summarise(mean = mean(height, na.rm = TRUE)) и отправить ее на group_map().

Я пытался создать функцию f(), которая получает аргумент data, который является объектом tibble с ранее определенными группами. Вторым аргументом функции f() будет ..., чтобы я мог передать интересующие переменные от data до f().

f <- function(dados, ...){
  dados %>% summarise(mean = mean(..., na.rm = TRUE))
}

starwars %>% group_by(gender, species) %>% 
  group_map(.tbl = ., .f = ~f(dados = .x), height) 

1 Ответ

0 голосов
/ 16 мая 2019

* Решения 1002 *:

func_1 <- function(dados, var, ...){

  var_interesse <- enquo(var)
  dots <- enquos(...)

  # Could be attributed direct reference ...
  dados %>% group_by(!!!dots) %>% 
    summarise(media = mean(x = !!var_interesse, na.rm = TRUE))
}

starwars %>% func_1(var = height, gender, species)

или

func_2 <- function(dados, var){

  var_interesse <- enquo(var)
  #dots <- enquos(...)

  dados %>%  summarise(media = mean(x = !!var_interesse, na.rm = TRUE))
}

agrupamento <- starwars %>% group_by(gender, species)

agrupamento %>% 
  group_map(.tbl = ., .f = ~func_2(dados = .x, var = height)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...