Применить функцию карты к сгруппированному фрейму данных с помощью purrr - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь применить функцию, которая принимает несколько входных данных (которые представляют собой столбцы, которые различаются в зависимости от рассматриваемой проблемы), и применяю это к списку фреймов данных. Я взял приведенный ниже код из этого примера: Сопоставить с несколькими фреймами данных Purrr и использовать эти модифицированные фреймы данных в качестве выходных данных и изменил его, добавив в него другую метрику моего выбора («выбор»). Однако этот код выдает ошибку «Ошибка в .f (.x [[i]], ...): неиспользуемый аргумент (choice =" disp ")".

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

mtcars2 <- mtcars 

#change one variable just to distinguish them 
mtcars2$mpg <- mtcars2$mpg / 2

#create the list
dflist <- list(mtcars,mtcars2)

#then, a simple function example
my_fun <- function(x) 

{x <- x %>%
  summarise(`sum of mpg` = sum(mpg), 
            `sum of cyl` = sum(cyl),
            `sum of choice` = sum(choice))}

#then, using map, this works and prints the desired results
list_results <- map(dflist,my_fun, choice= "disp")

1 Ответ

0 голосов
/ 06 сентября 2018

Три вещи для исправления кода выше:

  1. Добавьте choice в качестве аргумента в вашу функцию.
  2. Сделайте так, чтобы ваша функция выводила, удалив x <-
  3. Используйте tidyeval , чтобы аргумент "выбор" работал.

Таким образом, отредактированный код выглядит следующим образом:

my_fun <- function(x, choice) 

{x %>%
summarise(`sum of mpg` = sum(mpg), 
          `sum of cyl` = sum(cyl),
          `sum of choice` = sum(!!choice))}

list_results <- map(dflist, my_fun, choice = quo(disp))

Если вы хотите остаться в пределах фрейма данных / таблицы, то использование nest для создания списка-столбцов может помочь.

mtcars2$group <- sample(c("a", "b", "c"), 32, replace = TRUE)
mtcars2 %>% 
    as_tibble() %>% 
    nest(-group) %>% 
    mutate(out = map(data, my_fun, quo(disp))) %>% 
    unnest(out)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...