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

我正在尝试使用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变量的值?

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

最佳答案 首先,如有必要,检查它是否是分组数据框:inherits(data,“grouped_df”).

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

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

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

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

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

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

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

点赞