r - 如何获取分组变量和函数(可能是 group_nest)?
问题描述
假设我有以下代码:
df <- data.frame(a=c(1,2,3), b=c(4,5,6), c=c(7,8,9))
func <- function(...) {
the_args <- list(...)
data <- the_args[[1]]
message(names(data))
}
现在我想对 func 进行 3 次调用,每次调用a
. 我想也许group_nest
是我的朋友,但不完全是:
# func gets all rows instead of one group at a time
df %>% group_nest(a) %>% func()
# func gets one group at a time, but without a
df %>% group_nest(a) %>% mutate(result=map(data, func))
我想func
被调用三次(a 的每个不同值一个),每次都包含所有三列(a、b、c)。
建议?
编辑:如果我提前知道分组,我可以提前硬编码:
df %>% group_nest(a) %>% mutate(result=map(data, func, a))
在我可以设置的功能内a <- the_args[[2]]
但是,我想要一个对不同分组具有弹性的结果,并传递一个完整的数据框(数据和分组列放在一起),因此func
不必知道如何组装数据。
编辑 2:我的实际用例有更一般地指定的分组列,即类似于
grouping_cols <- c('a')
df %>% group_nest(across(all_of(grouping_cols))) %>%
mutate(result=map(data, func))
解决方案
对于最简单的情况,您可以
df %>% group_nest(a_ = a)
正如OP所指出的,您还可以将变量用于更通用的情况
df %>% group_nest(foo = across(all_of(grouping_cols)))
另一种选择是
df %>%
mutate(across(!!grouping_cols, `(`, .names = "{.col}_")) %>%
group_nest(across(paste0(grouping_cols, "_"))
推荐阅读
- python - 更改时间列精度
- visual-studio-code - Can you create a file or folder by path in VS Code?
- c - 在 C 中使用 strcat 时程序返回 -1073741819
- css - 如何使用 CSS Grid 为嵌套网格中的每一行以不同的方式跨越列?
- java - Happens-before 和 volatile 的重新排序
- r - pickerInput 字体或背景颜色
- microsoft-graph-api - 如何通过 MS 图形 API 或任何其他方法识别 Office 365 组是否有来宾?
- python - 尝试从 json 输入构建列表时出现“字符串索引必须是整数”错误
- typo3 - 由于缺少 PHP 库“argon2i”,TYPO3 v9.5 的安装在最后一步失败
- hp-uft - 需要帮助从 HP UFT 的下拉列表中选择项目