2011-04-26 9 views
5

条件が変わるたびに実験データを要約したいと思います。連続サブグループddply

temp response.mean 
25  3.3 
50  6.5 
25  3.5 

使用した場合ddply次のように:

ライブラリ(plyr)
ddply私はこの方法でこれを要約したい

> df=data.frame(tos=1:9, temp=rep(c(25,50,25), each=3), response=c(3.2,3.3,3.3, 6.5, 6.5, 6.5, 3.5,3.6,3.5)) 
> df 
    time temp response 
1 1 25  3.2 
2 2 25  3.3 
3 3 25  3.3 
4 4 50  6.5 
5 5 50  6.5 
6 6 50  6.5 
7 7 25  3.5 
8 8 25  3.6 
9 9 25  3.5 

:たとえば

(df、c( "temp")、要約、reponse.mean =平均(応答)

出力は次のようになります。

temp response.mean 
1 25   3.4 
2 50   6.5 

は、これを実現する方法はありますか?ここで

答えて

11

この

# find how many observations in each experiment 
tmp1 = rle(df$temp)$lengths 

# create a column referring to experiment number 
df$expt = rep(1:length(tmp1), tmp1) 

# compute means for each combination of temp and expt 
ddply(df, .(expt, temp), summarize, response.mean = mean(response)) 

を達成するための1つの方法は、結果が正しいでソートされるように、これはあなたの `ddply`呼び出しで出力

expt temp response.mean 
1 1 25  3.266667 
2 2 50  6.500000 
3 3 25  3.533333 
+0

フリップ' expt'と 'temp'を生成しています注文。それ以外の素晴らしい答え。 –

+0

@ joshua。提案に感謝します。 'expt'と' temp'をひっくり返して出力を更新しました – Ramnath

+0

'rle'を十分に得ることができません。 :) –