我正在尝试使用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 ……