2016-10-17 18 views
2

私は集計関数を使用して、コレクションの場所に基づいて結果の要約を取得しました。サマリは3 obsを返します。 2つの変数からなる。 1つの変数はグループ名であり、1つはグループごとの集計統計です。集約関数と集計関数を使用してデータフレーム内のユニークな列を取得する方法は?

データフレーム内で各列(グループ、分、1/4,1メジアンなど)を一意に表示するにはどうすればよいですか?最終的に私はこれを3 obsにしたいと思います。 7つの変数、各列に1つまたは私はきれいに分、中央値、および最大位置を取得する方法を知りたいです。ありがとう! aggregate年代simplifyパラメータのデフォルト以来

Result <- c(1,1,2,100,50,30,45,20, 10, 8) 
Location <- c("Alpha", "Beta", "Gamma", "Alpha", "Beta", "Gamma", "Alpha", "Beta", "Gamma", "Alpha") 

df <- data.frame(Result, Location) 
head(df) 

Agg <- aggregate(df$Result, list(df$Location), summary) 

head(Agg) 
    Group.1 x.Min. x.1st Qu. x.Median x.Mean x.3rd Qu. x.Max. 
1 Alpha 1.00  6.25 26.50 38.50  58.75 100.00 
2 Beta 1.00  10.50 20.00 23.67  35.00 50.00 
3 Gamma 2.00  6.00 10.00 14.00  20.00 30.00 
+1

'tidyr ::アンネスト()'?あなたはあなたの例[再現可能](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)を作る必要があります。 – alistaire

+0

ああ、 'aggregate'はネストされた行列を作ります。なぜなら、デフォルトは' simplify = TRUE'です。必要に応じて 'data.frame(Group.1 = Agg $ Group.1、as.data.frame(Agg $ x))'でハックすることができます。代わりに、dplyr構文は素晴らしいです: 'library(dplyr); df%>%group_by(場所)%>%summarise_all(楽しい(分、中央値、最大)) ' – alistaire

答えて

1

TRUEに、それはマトリックスに(ここでは、summary)関数を呼び出した結果を簡素化しています。あなたは、独自のdata.frameに列を強要、data.frameを再構築することができます

with(Agg, data.frame(Group.1, as.data.frame(x))) 

## Group.1 Min. X1st.Qu. Median Mean X3rd.Qu. Max. 
## 1 Alpha 1  6.25 26.5 38.50 58.75 100 
## 2 Beta 1 10.50 20.0 23.67 35.00 50 
## 3 Gamma 2  6.00 10.0 14.00 20.00 30 

代わりに、機能のdplyrのsummarise家族はよく、複数の要約統計量を扱うことができます。

library(dplyr) 

df %>% group_by(Location) %>% summarise_all(funs(min, median, max)) 

## # A tibble: 3 × 4 
## Location min median max 
##  <fctr> <dbl> <dbl> <dbl> 
## 1 Alpha  1 26.5 100 
## 2  Beta  1 20.0 50 
## 3 Gamma  2 10.0 30 

あなたが本当にしたい場合summaryのすべて、あなたはdata.frameに結果を有効にするbroom::tidyを使用することができます。

df %>% group_by(Location) %>% do(broom::tidy(summary(Result))) 

## Source: local data frame [3 x 7] 
## Groups: Location [3] 
## 
## Location minimum q1 median mean q3 maximum 
##  <fctr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
## 1 Alpha  1 6.25 26.5 38.50 58.75  100 
## 2  Beta  1 10.50 20.0 23.67 35.00  50 
## 3 Gamma  2 6.00 10.0 14.00 20.00  30 
+1

あなたの詳細な要約、@alistaireありがとうございます。これらの両方が動作します!私は間違いなく、複数のパラメータを1つのデータフレーム内で簡単に処理できるので、dplyrオプションを好んでいます(これを実現するためには「集約」をさらにハックする必要があります。 – kslayerr

+0

もう一つの質問、@alistaire ... dplyr 'summarise'関数でログ手段と標準偏差を記録できるかどうか知っていますか? – kslayerr

+0

1つの値を返すタイプのものを使用できます。あらかじめ形成された関数を使う以外にも、変数を 'funs'の' .'で置き換える必要があります。 'summary_all(funs(log_mean = log(mean(。))、log_sd = log(sd(。))))' – alistaire

関連する問題