代码之家  ›  专栏  ›  技术社区  ›  JFG123

将map函数应用于purrr中的分组数据帧

  •  1
  • JFG123  · 技术社区  · 6 年前

    Map with Purrr multiple dataframes and have those modified dataframes as the output 并将其修改为包含我选择的另一个度量(“choice”)。但是,此代码会引发一个错误:

    .f(.x[[i]],…)中出错:未使用的参数(choice=“disp”)。

    理想情况下,我希望能够创建一个分组的数据帧(使用groupby或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 回复  |  直到 5 年前
        1
  •  4
  •   Mirabilis    6 年前

    修复上述代码需要三件事:

    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))
    

    如果您想保持在dataframe/tible中,那么使用 nest 创造 list-columns 可能会有帮助。

    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)