如何在R中将每月时间序列与每周时间序列对齐

时间:2018-07-11 14:22:20

标签: r date time-series

我的目标是结合两个时间序列(第一列中的每周时间和第二列中的每月时间以及每周时间序列的日期格式)。

我有一个每周时间序列,其值从2004年1月4日到2018年6月24日。

我还有一个每月时间序列,其值从2004-01-01到2018-06-01。 (总是以每月的第一天为-01)

对于每月的时间序列,我想用同一月的每周的相同数值来填充NA。

我已经在R中尝试过na.locf函数:

na.locf(merge(monthly, foo=zoo(NA, order.by=seq(start(monthly), end(monthly), "week")))[, 1])

但是,它不能安静地解决问题。

最后它应该看起来像这样的图片:

Output Goal

2 个答案:

答案 0 :(得分:0)

您是否研究了融化功能?这可能会帮助您朝正确的方向发展。 (压力包含在默认的“数据集”-程序包中)

library(reshape2)

data <- head(pressure)

head(data)
melt(data, variable = "pressure")

    > head(data)
  temperature pressure
1           0   0.0002
2          20   0.0012
3          40   0.0060
4          60   0.0300
5          80   0.0900
6         100   0.2700

> melt(data, variable = "pressure")
      pressure   value
1  temperature 0.0e+00
2  temperature 2.0e+01
3  temperature 4.0e+01
4  temperature 6.0e+01
5  temperature 8.0e+01
6  temperature 1.0e+02
7     pressure 2.0e-04
8     pressure 1.2e-03
9     pressure 6.0e-03
10    pressure 3.0e-02
11    pressure 9.0e-02
12    pressure 2.7e-01

答案 1 :(得分:0)

不是很干净,但也许有帮助:

d<-data.frame(rep(c(3,NA,NA,NA,NA,4,NA,NA,NA,NA),7),seq(as.Date("1999-01-01",tz = "GMT","%Y-%m-%d"),as.Date("2000-05-01",tz = "GMT","%Y-%m-%d"), by="1 week"))
colnames(d)<-c("data","Date")
time<-d$Date
a<-aggregate(d,by=list(substr(d$Date,1,7)),FUN=function(x) max(x,na.rm=TRUE))
colnames(a)<-c("Date","Data","xyz")
d$Date<-substr(d$Date,1,7)
t<-merge(a[-3],d[-1],by = "Date")
t$Date<-time