使用dplyr在R中用动态变量汇总

时间:2016-08-31 14:30:20

标签: r dplyr

我正在尝试使用R中的dplyr进行汇总和分组,但是当我使用变量代替显式调用汇总列时,它使用dist的总和来表示每行的整个数据集,而不是正确分组。这可以从下面的TestBad和TestGood之间的差异中轻松看出。我只是希望能够像在TestBad中一样使用GraphVar变量复制TestGood的结果。

    require("dplyr")
    GraphVar <- "dist"

    TestBad <- summarise(group_by_(cars,"speed"),Sum=sum(cars[[GraphVar]],na.rm=TRUE),Count=n())

    testGood <- summarise(group_by_(cars,"speed"),Sum=sum(dist,na.rm=TRUE),Count=n())

谢谢!

2 个答案:

答案 0 :(得分:4)

您需要标准评估函数summarise_以及lazyeval::interp

library(lazyeval)
cars %>%
    group_by_("speed") %>%
    summarise_(Sum = interp(~sum(var, na.rm = TRUE), var = as.name(GraphVar)), 
             Count = ~n())

答案 1 :(得分:1)

按名称引用一个或多个列的最新用法似乎是

cars %>% group_by(across("speed")) %>% ...
cars %>% group_by(across(c("speed", "dist"))) %>% ...

请参阅 vignette("colwise"),第 Other verbs 节。