2011-04-26 10 views
5

Me gustaría resumir mis datos experimentales cada vez que cambia una condición.subgrupos continuos con ddply

Por ejemplo:

> 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 

me gustaría resumir esto en esta forma:

temp response.mean 
25  3.3 
50  6.5 
25  3.5 

Si el uso ddply así:

biblioteca (plyr)
ddply (df, c ("temp"), resuma, reponse.mean = media (respuesta)

la salida es:

temp response.mean 
1 25   3.4 
2 50   6.5 

¿Hay una manera de lograr esto?

Respuesta

11

Esta es una manera de lograr esto

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

Esto produce la salida

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

tirón 'expt' y' 'temp' en su llamada ddply' lo que el resultado se ordena en la correcta orden. Aparte de eso, respuesta increíble. –

+0

@joshua. Gracias por la sugerencia. Volqué 'expt' y' temp' y actualicé la salida – Ramnath

+0

No puedo tener suficiente con 'rle'. :) –

Cuestiones relacionadas