2016-08-31 15 views
1

Rのdplyrからsummarizeとgroup byを使用しようとしていますが、集計列を明示的に呼び出す代わりに変数を使用すると、データセット全体のdistの合計が使用されます。各行は適切にグループ化されるのではなく、これは、以下のTestBadとTestGoodの違いで簡単に見ることができます。 TestBoodのようにGraphVar変数を使ってTestGoodの結果を複製できるようにしたいだけです。dplyrを動的変数でRで要約する

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()) 

ありがとうございます!

+0

dplyrの標準評価関数が必要です。例[here](http://stackoverflow.com/questions/27975124/pass-arguments-to-dplyr-functions)と[nse vignette here](https://cran.r-project.org/web)を参照してください。 /packages/dplyr/vignettes/nse.html) – aosmith

+0

@aosmith彼らはすでに標準的な評価( 'group_by_')を使っていて、問題があると私は思っています。 – Frank

答えて

3

標準評価機能summarise_lazyeval::interpが必要です。

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