首页 文章

如何获取group_by值以用于传递给函数?

提问于
浏览
4

我正在尝试使用dplyr将函数应用于使用group_by函数分组的数据框 . 我正在使用do()将一个函数应用于分组数据的每一行 . 我想获取group_by变量的值,以便我可以在函数调用中使用它 .

所以,实际上,我有 -

tmp <-
  my_data %>%
  group_by(my_grouping_variable) %>%
  do(my_function_call(data.frame(x = .$X, y = .$Y),
                      GROUP_BY_VARIABLE)

我确信我可以打电话给我,让它变得独一无二......

do(my_function_call(data.frame(x = .$X, y = .$Y),
                    unique(.$my_grouping_variable))

但是,它看起来很笨拙,并且无法为每个分组值调用唯一的 .

有没有办法在dplyr中获取group_by变量的值?

如果这是一个很容易回答的问题,我会过早地说抱歉 . 我保证我已经详尽地寻找答案 .

2 回答

  • 0

    您可以使用 groups() ,但是SE版本不存在,所以我不确定它在编程中的用途 .

    library(dplyr)
    
    df <- mtcars %>% group_by(cyl, mpg)
    
    groups(df)
    
    [[1]]
    cyl
    
    [[2]]
    mpg
    
  • 2

    首先,如有必要,检查它是否是分组数据框: inherits(data, "grouped_df") .

    如果需要数据框的子集,可以嵌套组:

    mtcars %>% group_by(cyl) %>% nest()
    

    通常,您不会嵌套在管道链中,而是检查您的函数:

    your_function(.x) <- function(x) {
      if(inherits(x, "grouped_df")) x <- nest(x)
    }
    

    然后,您的函数应使用所有分组子集迭代列表列 data . 如果你在mutate中使用一个函数,例如

    mtcars %>% group_by(cyl) %>% mutate(abc = your_function_call(.x))
    

    然后请注意,您的函数直接接收每个组的值,并作为类 structure 传递 . 这有点难以解释,只需尝试一下并逐步调试 your_function_call ......

相关问题