2016-01-29 4 views
0

У меня есть два кадра данных, оба являются данными временных рядов. Один из них - регулярный интервал (ежедневно), другой - нерегулярный. Но вторая основана на накопленной стоимости первой. Например, это является примером:Как объединить один фрейм данных на основе другого временного индекса фрейма данных?

date1<-c('2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04', '2010-01-05','2010-01-06','2010-01-07') 

    data.frame1<-data.frame(date=c(as.Date(date1, format= '%Y-%m-%d')), A=c(0.5,10,15,3,10,20,12) , B=c(1.5,1,1.5,3.2,10.5,9,12)) 

     date  A B 
    2010-01-01 0.5 1.5 
    2010-01-02 10.0 1.0 
    2010-01-03 15.0 1.5 
    2010-01-04 3.0 3.2 
    2010-01-05 10.0 10.5 
    2010-01-06 20.0 9.0 
    2010-01-07 12.0 12.0 

    date2<-c('2010-01-03', '2010-01-07') 

    data.frame2<-data.frame(date=c(as.Date(date2, format= '%Y-%m-%d')), A=c(25.5,45) , B=c(4,34.7)) 

     date  A B 
    2010-01-03 25.5 4 
    2010-01-07 45 37.7 

Первый ряд data.frame2 (на 2010-01-03) накапливается значение из трех рядов data.frame1 (2010-01-01, 2010-01 -02,2010-01-03). Теперь я хотел бы их сравнить. Но прежде, я должен сделать agreggation data.frame1, чтобы он мог быть непосредственно сопоставимым. Обратите внимание, что временной интервал для data.frame2 является нерегулярным. Может ли кто-нибудь помочь мне, как это сделать? благодаря !

ответ

0

Использование sapply для нахождения соответствующей даты в data2 является одним из способов.

data.frame1$date <- as.character(data.frame1$date) 
data.frame2$date <- as.character(data.frame2$date) 

data.frame1$date2 <- sapply(data.frame1$date, function(d) 
    with(data.frame2, min(date[d <= date]))) 

library(dplyr) 
group_by(data.frame1, date2) %>% summarize(A = sum(A), B = sum(B)) 
Смежные вопросы