r - 使用 dtplyr 时,将函数输入中的列用于 group_by 变量
问题描述
尝试使用 dtplyr 按组汇总列时,分组似乎不起作用。由于 group 变量是我的函数的输入,因此我尝试使用 group_by_ 仅接收错误消息。
数据:
df <- data.frame(
id=c(1,1,1,2,2,2,3,3,3),
year=c(2014, 2015, 2016, 2015, 2015, 2016, NA, NA, 2016),
code=c(1,2,2, 1,2,3, 3,4,5),
dv1=1:9,
dv2=2:10
) %>% as.data.table()
cols <- c("dv1", "dv2")
> df
id year code dv1 d2
1: 1 2014 1 1 2
2: 1 2015 2 2 3
3: 1 2016 2 3 4
4: 2 2015 1 4 5
5: 2 2015 2 5 6
6: 2 2016 3 6 7
7: 3 NA 3 7 8
8: 3 NA 4 8 9
9: 3 2016 5 9 10
功能:
for(i in seq_along(columns)) {
sub1 <- df %>%
select("id", columns[i], group) %>%
group_by(group) %>%
summarise(mean=mean(.data[[columns[i]]], na.rm=T), sd=sd(.data[[columns[i]]], na.rm=T)) %>%
ungroup() %>%
as_tibble()
print(sub1)
}
}
test(data=df, columns=cols, group="year")
# A tibble: 1 x 3
group mean sd
<chr> <dbl> <dbl>
1 year 5 2.74
# A tibble: 1 x 3
group mean sd
<chr> <dbl> <dbl>
1 year 6 2.74
解决方案
这是一个reprex
类似于我认为你正在寻找的东西。这不是最性感的解决方案,但它会起作用:
library(tidyverse)
f <- function(grouping_var) {
iris %>%
group_by(!!sym(grouping_var)) %>%
summarize(N = n())
}
f('Species')
#> # A tibble: 3 x 2
#> Species N
#> * <fct> <int>
#> 1 setosa 50
#> 2 versicolor 50
#> 3 virginica 50
由reprex 包于 2021-03-17 创建(v1.0.0)
推荐阅读
- angular - 使用 let index = index 在 *ngFor 内单击 Mat-Button 不会做出反应/触发动作
- npm - NPM 全局包安装无法正常工作
- reactjs - Npm start 命令给出 eventjs:187 错误
- python - SageMaker 笔记本连接到 EMR 导入自定义 Python 模块
- css - 块引用元素中背景图像的阴影过滤器和其他设置
- c - 从进程启动 Contiki 进程
- neo4j - 匹配与一组其他节点相关的所有节点 - neo4j
- pytest - 使用 moto 模拟多个 AWS 服务
- javascript - 动态添加按钮 d3.js
- python-3.x - 如何将字符串的类型更改为字节串?