r - применить функцию к каждому вложенному фрейму данных, который находится внутри фрейма данных в списке - PullRequest
0 голосов
/ 13 октября 2018

У меня есть структура, к которой я хочу применить функцию, но не могу ее правильно использовать, используя purrr::map.

В списке есть два вложенных кадра данных.Функция должна применяться ко всем элементам вложенных фреймов данных.Чтобы воспроизвести структуру данных:

df1 <- data.frame(a = c(1,1,2,2,3,3),
              b = c(1,2,3,4,5,6))
df1 <- df1 %>% 
    group_by(a) %>% 
    nest()

df2 <- data.frame(m = c(1,1,1,2,3,3),
                  n = c(6:11)) 
df2 <- df2 %>% 
    group_by(m) %>% 
    nest()

ls1 <- list(df1,df2)

Можно использовать простую функцию, такую ​​как mean или max:

f1 <- function(x) {
    x %>% 
        unnest() %>% 
        summarise(b = sum(b))
}

ls2 <- ls1 %>% map(~ .x, f1)

, которой не удается выполнить работу.Идеи решить эту проблему с помощью purrr идеальны, но любые приветствуются.

1 Ответ

0 голосов
/ 13 октября 2018

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

library(purrr)

map(ls1, function(x) {
  map(x, mean)
})

# [[1]]
# [[1]]$a
# [1] 2
# 
# [[1]]$b
# [1] 3.5
# 
# 
# [[2]]
# [[2]]$m
# [1] 1.833333
# 
# [[2]]$n
# [1] 8.5

В основном я вложил два map, как вы можете видеть.Помните, что purrr дает вам возможность лучше контролировать вывод с некоторыми вариантами, такими как map_df или map_dbl, в отличие от некоторых *apply.

...