2011-04-26 9 views
5

Chciałbym podsumować moje dane eksperymentalne za każdym razem, gdy stan ulegnie zmianie.ciągłe podgrupy z ddply

Na przykład:

> 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 

chciałbym podsumować to w ten sposób:

temp response.mean 
25  3.3 
50  6.5 
25  3.5 

Jeśli użycie ddply tak:

biblioteka (plyr)
ddply (df, c ("temp"), podsumuj, reponse.mean = średnia (odpowiedź)

wyjście jest:

temp response.mean 
1 25   3.4 
2 50   6.5 

Czy istnieje sposób, aby osiągnąć ten cel?

Odpowiedz

11

Oto jeden ze sposobów, aby to osiągnąć

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

To daje wyjście

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

Klapki 'expt' i' 'temp' w swojej rozmowy ddply' więc wynik jest sortowana w prawidłowy zamówienie. Poza tym wspaniała odpowiedź. –

+0

@joshua. dzieki za sugestie. Przerzuciłem 'expt' i' temp' i zaktualizowałem wyjście – Ramnath

+0

Nie mogę uzyskać wystarczającej ilości 'rle'. :) –

Powiązane problemy