r-在列表中数据框内的每个嵌套数据框上应用函数

时间:2018-10-13 07:34:23

标签: r list dataframe nested purrr

我有一个要在其中应用功能的结构,但是无法使用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)

可以使用像meanmax这样的简单函数:

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

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

这无法完成任务。用“ purrr”解决这个问题的想法是理想的,但是任何欢迎。

1 个答案:

答案 0 :(得分:1)

我不知道这是否是最好的解决方案,但应该可以完成工作:

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_dfmap_dbl之类的某些变体更好地控制输出,而不同于某些*apply