如何根据其他数据帧时间索引聚合一个数据帧?

时间:2016-01-29 16:12:43

标签: r dataframe aggregate plyr

我有两个数据框,都是时间序列数据。一个是定期间隔(每天),另一个是不规则的。但第二个是基于第一个的累积值。例如,这是一个例子:

    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)的累计值。 现在我想比较一下。但之前,我必须对data.frame1进行聚合,以便它可以直接进行比较。请注意,data.frame2的时间间隔是不规则的。任何人都可以帮我怎么做?谢谢!

1 个答案:

答案 0 :(得分: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))