【问题标题】:r - apply a function on each nested dataframe that is within a dataframe within a listr - 对列表中数据框内的每个嵌套数据框应用函数
【发布时间】:2019-03-18 08:08:08
【问题描述】:

我有一个结构,我想在其上应用函数,但使用 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”解决这个问题的想法是理想的,但欢迎任何想法。

【问题讨论】:

    标签: r list dataframe nested purrr


    【解决方案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 不同。

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2015-04-19
      • 2021-05-24
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2018-03-21
      • 2021-07-22
      • 2013-08-01
      相关资源
      最近更新 更多