gpt4 book ai didi

r - 使用 purrr 将映射函数应用于分组数据框

转载 作者:行者123 更新时间:2023-12-04 01:52:43 25 4
gpt4 key购买 nike

我正在尝试应用一个函数,该函数接受多个输入(这些输入是根据手头问题而变化的列)并将其应用于数据框列表。我从这个例子中获取了以下代码:Map with Purrr multiple dataframes and have those modified dataframes as the output并修改它以包含我选择的另一个指标(“选择”)。但是,此代码会引发错误:

Error in .f(.x[[i]], ...) : unused argument (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")

最佳答案

修复上述代码的三件事:

  • 添加 choice作为函数中的参数。
  • 通过删除 x <- 使您的函数具有输出
  • 使用 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))

    如果你想留在数据帧/tibble 内,那么使用 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)

    关于r - 使用 purrr 将映射函数应用于分组数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52177157/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com