2016-12-06 7 views
0

特定の関数をデータフレームのグループ化にddply()を使って適用することは可能ですが、グループ化されたデータフレームを関数の引数?例としてグループ化されたデータフレームをddply()の関数で自己引用する方法

テイク分():

私が持っているもの:

> BodyWeight 
    Treatment day1 day2 day3 
1   a 32 33 36 
2   a 35 35 26 
3   a 33 38 46 
4   b 23 24 25 
5   b 22 16 34 
6   b 36 35 37 
7   c 45 45 39 
8   c 29 26 12 
9   c 43 27 36 

は、私が欲しい:私がやったことと、私が得たもの

Treatment min 
1   a 26 
2   b 16 
3   c 12 

> ddply(BodyWeight, .(Treatment), summarize, min= min(BodyWeight[,-1])) 
    Treatment min 
1   a 12 
2   b 12 
3   c 12 

min()は単なる例で、unspecif IC溶液が望ましい。

答えて

1

あなたがしたいのは、治療と曜日で要約することです。問題は複数の列に日があることです。データをワイドフォーマットから複数のカラムに変換して、長いフォーマット(キーと値のペア)に変換する必要があります。

library(tidyr) 
library(plyr) 

bw_long <- gather(Bodyweight, day, value, day1:day3) 

ddply(bw_long, .(Treatment, day), summarize, min = min(value)) 

p.s.後継者を確認するplyrdplyr

+0

ありがとうございました。しかしmin()は単なる例であり、実際の作業では、引数として分割データフレームを取るより複雑なカスタム関数が適用されます。 –

+0

'plyr'は分割データフレームのすべての部分を別々に評価すると信じていますので、' $ '演算子を使って必要な変数にアクセスすることができます(例えば' min(Bodyweight $ day1) ')。 'dplyr'と標準評価を行いました。 –

1

data.tableを使用できます。 'data.table'(setDT(BodyWeight))、 '治療'、unlistサブセットData.table(.SD)にグループ化し、minの値を取得します。

library(data.table) 
setDT(BodyWeight)[, .(min = min(unlist(.SD))) , by = Treatment] 
# Treatment min 
#1:   a 26 
#2:   b 16 
#3:   c 12 
関連する問題