【发布时间】:2019-12-12 21:52:36
【问题描述】:
在dplyr中,group_by有一个参数add,如果为真则添加到group_by中。例如:
data <- data.frame(a=c('a','b','c'), b=c(1,2,3), c=c(4,5,6))
data <- data %>% group_by(a, add=TRUE)
data <- data %>% group_by(b, add=TRUE)
data %>% summarize(sum_c = sum(c))
输出:
a b sum_c
1 a 1 4
2 b 2 5
3 c 3 6
是否有类似的方法可以将汇总变量添加到汇总语句中?我有一些复杂的条件(使用dbplyr)如果x=TRUE 我想添加
变量x_v 到摘要。
我看到了几个相关的 stackoverflow 问题,但我没有看到这个。
编辑:这是一些精确的示例代码,但从真实代码(有两个以上的条件)简化而来。
summarize_num <- TRUE
summarize_num_distinct <- FALSE
data <- data.frame(val=c(1,2,2))
if (summarize_num && summarize_num_distinct) {
summ <- data %>% summarize(n=n(), n_unique=n_distinct())
} else if (summarize_num) {
summ <- data %>% summarize(n=n())
} else if (summarize_num_distinct) {
summ <- data %>% summarize(n_unique=n_distinct())
}
根据条件(此处为 summarize_num 和 summarize_num_distinct),最终汇总(此处为 summ)具有不同的列。
随着条件数量的增加,子句的数量组合增加。但是,条件是独立的,所以我也想独立添加汇总变量。
我正在使用dbplyr,所以我必须以一种可以将其翻译成 SQL 的方式进行操作。
【问题讨论】:
-
是否会使用
dplyr::mutate而不是summarise工作,即获得每组效果,然后可以根据任何条件进行过滤? -
@akrun 合理的请求。我添加了一些示例代码。它适用于简单的情况,但在许多情况下组合起来很困难。如果我有很多条件,我希望它保持简单。
-
@biomiha 好主意,但我认为没有。在真实的例子中,我使用的是 group_by 子句,所以我认为我需要总结而不是变异。
-
变异仍然按组变异(肯定是 dplyr,不是 100% 确定 dbplyr)。