2016-09-06 3 views
0

у меня есть кадр данныхвысчитывает возвращение на колоннах для нескольких групп

data.frame(quarter= c(1,2,3), group1 = c(1,2,3), group2 = c(6,8,10)) 

что лучший способ произвести возврат на четверть поэтому результаты

quarter group1 group 2 
2   1.0  .333 
3   .5  .25 

где расчет возвращение (Current value - PRevious)/previous so for quarter 3 group 1 (3-2)/2 = .5

+1

'применяются (ДФ [2: 3], 2, функция (х) (х-dplyr :: лаг (х))/dplyr: : отставание (х)) ' – shayaa

ответ

1

Поскольку ваши данные не являются объектом временного ряда, вы можете использовать apply для работы с вашими данными.frame:

> data.frame(quarter=df[-1,1], apply(df[,-1], 2, function(x) diff(x)/x[-length(x)])) 
    quarter group1 group2 
1  2 1.0 0.3333333 
2  3 0.5 0.2500000 
0

Или мы можем использовать mutate_each из dplyr

library(dplyr) 
df %>% 
    mutate_each(funs(c(NA, diff(.))/lag(.)), group1:group2) %>% 
    na.omit 
# quarter group1 group2 
#2  2 1.0 0.3333333 
#3  3 0.5 0.2500000 
Смежные вопросы