【问题标题】:How to aggregate one data frame based on other data frame time index?如何根据另一个数据帧时间索引聚合一个数据帧?
【发布时间】:2016-01-29 16:12:43
【问题描述】:

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

    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 的时间间隔是不规则的。谁能帮助我如何做到这一点?谢谢!

【问题讨论】:

    标签: r dataframe aggregate plyr


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多