2011-04-26 2 views
5

Я хотел бы обобщить свои экспериментальные данные каждый раз при изменении состояния.непрерывные подгруппы с 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 

Я хотел бы резюмировать это следующим образом:

temp response.mean 
25  3.3 
50  6.5 
25  3.5 

Если использовать ddply так:

библиотека (plyr)
ddply (df, c («temp»), суммировать, reponse.mean = mean (response)

выход:

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

Это производит выход

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

Флип '' expt' и temp' в вашем 'ddply' вызова, так что результат сортируется в правильной заказ. Кроме этого, удивительный ответ. –

+0

@joshua. спасибо за предложение. я перевернул 'expt' и' temp' и обновил вывод – Ramnath

+0

Не могу получить достаточно 'rle'. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^