【发布时间】:2020-09-17 11:26:07
【问题描述】:
假设我有这个代码:
> df<-data.frame(a=c(1,1,1,2,2,2), b=c(T,T,F,F,F,T))
> df %>% group_by(a) %>% summarize(trues=sum(b), falses=sum(!b))
# A tibble: 2 x 3
a trues falses
<dbl> <int> <int>
1 1 2 1
2 2 1 2
我想使用一个字符串变量来给出b(例如在一个for循环中)。我想这和this question 完全一样,但我似乎无法让它工作。
一些失败的尝试:
var <- 'b'
df %>% group_by(a) %>% summarize_(trues=sum(var), falses=sum(!var))
df %>% group_by(a) %>% summarize(trues=sum({{var}}), falses=sum(!{{var}}))
df %>% group_by(a) %>% summarize_(trues=sum({{var}}), falses=sum(!{{var}}))
foo1 <- function(df, var) {
df %>% group_by(a) %>% summarize(trues=sum({{var}}), falses=sum(!{{var}}))
}
foo1(df, 'b')
foo2 <- function(df, var) {
var <- enquo(var)
df %>% group_by(a) %>% summarize(trues=sum(!!var), falses=sum(! !!var))
}
foo2(df, 'b')
也许我可以在另一个问题中使用 lazyeval 包,但我更想知道如何只使用 tidyverse。
【问题讨论】: