如何根据其他数据帧时间索引聚合一个数据帧?
How to aggregate one data frame based on other data frame time index?
我有两个数据框,都是时间序列数据。一种是有规律的间隔(每天),另一种是不规律的。但是第二个是基于第一个的累计值。例如,这是一个例子:
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 的时间间隔是不规则的。谁能帮我怎么做?谢谢!
使用 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))
我有两个数据框,都是时间序列数据。一种是有规律的间隔(每天),另一种是不规律的。但是第二个是基于第一个的累计值。例如,这是一个例子:
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 的时间间隔是不规则的。谁能帮我怎么做?谢谢!
使用 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))