2017-01-21 18 views
0

dplyr内のsummarize関数を使用して、接続されたデータベースからテーブルとフィールド名を渡す2つの引数関数を使用して要約統計量を計算しようとしています。残念ながら、要約関数を別の関数でラップすると、結果は正しくありません。エンドテーブルは、各行を反復しないデータフレームです。私は、下記の入力/出力を紹介します:dplyr要約関数への引数の受け渡し

要約統計機能 ライブラリ(dplyr)

data<-iris 
data<- group_by(.data = data,Species) 

SummaryStatistics <- function(table, field){ 
table %>% 
summarise(count = n(), 
      min = min(table[[field]], na.rm = T), 
      mean = mean(table[[field]], na.rm = T, trim=0.05), 
      median = median(table[[field]], na.rm = T)) 
} 

SummaryStatistics(data, "Sepal.Length") 

出力表をから間違って、それだけで同じ計算

を繰り返しています
 Species count min  mean median 
1  setosa 50 4.3 5.820588 5.8 
2 versicolor 50 4.3 5.820588 5.8 
3 virginica 50 4.3 5.820588 5.8 

正しい表/希望の結果 - - これはテーブルがどのように見えるかです。ラッパー関数の要約関数のoutsizeを実行すると、これが生成されます。

 Species count min  mean median 
1  setosa 50 4.3 5.002174 5.0 
2 versicolor 50 4.9 5.934783 5.9 
3 virginica 50 4.9 6.593478 6.5 

これはわかりやすいと思いますが、要約統計がラッパー関数の外部で完璧に機能する理由を把握することはできませんが、引数を渡すとすぐに各行について同じことが計算されます。どんな助けでも大歓迎です。

おかげで、ケヴ

+1

ラッパー機能の使い方を知らずに診断が難しい。しかし、推測すると、ラッパー関数の内部では、 'summarize'は計算に使用されているグループ化要因を知らないかもしれません。したがって、すべての行について同じ要約が返されます。 – jdobres

+0

@jdobresラッパー関数を追加します。申し訳ありません。 – AlphaKevy

+1

標準評価を使用する必要があります。より良いアイデアのために 'dplyr'のバイナリを読んでください。 –

答えて

4

あなたはlazyevalと一緒に、プログラムdplyr機能を使用するための標準的な評価を使用する必要があります。 dplyrNSE vignetteはそれをかなりうまくカバーしています。

library(dplyr) 
library(lazyeval) 

data <- group_by(iris, Species) 

SummaryStatistics <- function(table, field){ 
    table %>% 
    summarise_(count = ~n(), 
       min = interp(~min(var, na.rm = T), var = as.name(field)), 
       mean = interp(~mean(var, na.rm = T, trim=0.05), var = as.name(field)), 
       median = interp(~median(var, na.rm = T), var = as.name(field))) 
} 

SummaryStatistics(data, "Sepal.Length") 

# A tibble: 3 × 5 
    Species count min  mean median 
     <fctr> <int> <dbl> <dbl> <dbl> 
1  setosa 50 4.3 5.002174 5.0 
2 versicolor 50 4.9 5.934783 5.9 
3 virginica 50 4.9 6.593478 6.5 
+0

私の質問にお答えいただき、ありがとうございました。また、dplyrをプログラム的に使用する方法に関するドキュメントにリンクしていただきありがとうございます。私はこのようなものを探していたが、それを追跡できなかった。私は本当にあなたの答えの徹底に感謝します。もう一度男に感謝します。 – AlphaKevy

+0

NSEビネットリンクが死んでいます。[Programming with dplyr vignette](https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html)に置き換えられているようです。 – ropeladder

関連する問題