r - dplyr:对函数中的多个变量进行分组
问题描述
我想要两个分组变量列表。让我们说list1 = c("var2","var3","var4")
和 list2 = c("var2","var3")
dta = data.frame(var1 = c(1:8),
var2 = c(rep("AA",4),rep("BB",4)),
var3 = rep(c("C","D"),4),
var4 = c(1,1,0,0,0,0,1,1))
dta %>% group_by(var2,var3,var4) %>% summarise(mv1 = mean(var1)) %>%
group_by(var2,var3) %>% summarise(mv1_2 = mean(mv1))
我怎样才能创建这样的功能
sample_fun = function(dta, list1, list2){
dta %>% group_by(list1) %>% summarise(mv1 = mean(var1)) %>%
group_by(list2) %>% summarise(mv1_2 = mean(mv1))
}
解决方案
这里有两种方法可以做到这一点 -
- 纯
dplyr
溶液使用across
:
library(dplyr)
library(rlang)
sample_fun = function(dta, list1, list2){
dta %>%
group_by(across(all_of(list1))) %>%
summarise(mv1 = mean(var1)) %>%
ungroup %>%
group_by(across(all_of(list2))) %>%
summarise(mv1_2 = mean(mv1))
}
sample_fun(dta, list1, list2)
# var2 var3 mv1_2
# <chr> <chr> <dbl>
#1 AA C 2
#2 AA D 3
#3 BB C 6
#4 BB D 7
- 使用非标准评估
syms
:
sample_fun = function(dta, list1, list2){
dta %>%
group_by(!!!syms(list1)) %>%
summarise(mv1 = mean(var1)) %>%
ungroup %>%
group_by(!!!syms(all_of(list2))) %>%
summarise(mv1_2 = mean(mv1))
}
sample_fun(dta, list1, list2)
# var2 var3 mv1_2
# <chr> <chr> <dbl>
#1 AA C 2
#2 AA D 3
#3 BB C 6
#4 BB D 7
推荐阅读
- asp.net - 如何在 IIS 中发布 Blazor ASP.NET 应用程序?
- javascript - forEach in Array (in) 数组 JavaScript
- javascript - 将函数数据存储到新对象中并显示
- python - 如何使用 SQLAlchemy 和 pyodbc 正确处理“SQLExecDirectW”和“SQLEndTran”(错误 0x20)?
- javascript - 可能的未处理承诺拒绝:找不到变量 ErrorTitle
- c# - 如何将 PCM 转换为 MP3?
- c++ - 任何类成员函数类型
- python - 遍历 QTableWidget 中的项目
- python - 使用 Python 解析具有多个 json 的文本文件
- r - 如果在 R data.table 中满足条件,则获取唯一条目