2017-01-24 2 views
0

Dataset выглядит следующим образом:Агрегат для уникальных уровней нескольких переменных

ID | DELAY | PERIOD | TYPE 

A  5  30 days  1   
A  1  60 days  1    
A  2  30 days  2   
A  1  30 days  2   
B  2  30 days  2   
C  10  30 days  2   

Вывод должен выглядеть следующим образом:

ID | AV.DELAY_PERIOD_30DAYS_TYPE_1 | AV.DELAY_PERIOD_30DAYS_TYPE_2 ... 
    A    5        1.5 

Таким образом, по существу, мне нужно построить функцию, которая строит новые переменные - средняя задержка, уникальная для каждого идентификатора, разбивка на каждый уникальный период и тип.

Кто-нибудь?

ответ

1

Мы можем использовать dcast из data.table сделать summarisation, а также изменения формы

library(data.table) 
dcast(setDT(df1), ID~paste0("AV.DELAY_PERIOD_",PERIOD) + TYPE, value.var = "DELAY", mean) 
# ID AV.DELAY_PERIOD_30 days_1 AV.DELAY_PERIOD_30 days_2 
#1: A       5      1.5 
#2: B      NaN      2.0 
#3: C      NaN      10.0 
# AV.DELAY_PERIOD_60 days_1 
#1:       1 
#2:      NaN 
#3:      NaN 
+0

отлично работает. Спасибо! – Prometheus

2

Вы можете использовать агрегатную функцию в R.

df1<-aggregate(df,by=list(df$id,df$period,df$type),FUN=mean)