将每周时间序列延伸到每日

时间:2012-03-22 18:37:35

标签: r time-series xts

我有一个xts时间序列的每周值

Jan 4 2004, 0.99
Jan 11 2004, 1.11
Jan 18 2004, 1.06
....

我希望将其转换为每日价值

Jan 4 2004, 0.99
Jan 5 2004, 0.99
Jan 6 2004, 0.99
....
Jan 10 2004, 0.99
Jan 11 2004, 1.11
Jan 12 2004, 1.11
Jan 13 2004, 1.11
....

其中每个值在接下来的6天内被复制。

我怎样才能在R?

中这样做

2 个答案:

答案 0 :(得分:12)

您显示的数据不是xts系列。我假设这是数据在CSV文件中的表示方式。要回答你的问题,我假设你有一个每周xts对象w

w与空xts对象合并,其索引跨越所需的所有日期。然后在结果上使用na.locf

d <- merge(w, xts(,seq(start(w),end(w),"days")))
d <- na.locf(d)

答案 1 :(得分:0)

这是一种方法:

dat <- read.table(text="Jan 4 2004, 0.99
Jan 11 2004, 1.11
Jan 18 2004, 1.06", header=F)
dat

dat2 <- dat[rep(seq_len(nrow(dat)), 7), ]
dat2 <- with(dat2, dat2[order(V1, V2, V3), ])
dat2$V2 <- rep(dat$V2, each=7) + 0:6
rownames(dat2) <- 1:nrow(dat2)
dat2

给出了:

    V1 V2    V3   V4
1  Jan  4 2004, 0.99
2  Jan  5 2004, 0.99
3  Jan  6 2004, 0.99
4  Jan  7 2004, 0.99
5  Jan  8 2004, 0.99
6  Jan  9 2004, 0.99
7  Jan 10 2004, 0.99
8  Jan 11 2004, 1.11
9  Jan 12 2004, 1.11
10 Jan 13 2004, 1.11
11 Jan 14 2004, 1.11
12 Jan 15 2004, 1.11
13 Jan 16 2004, 1.11
14 Jan 17 2004, 1.11
15 Jan 18 2004, 1.06
16 Jan 19 2004, 1.06
17 Jan 20 2004, 1.06
18 Jan 21 2004, 1.06
19 Jan 22 2004, 1.06
20 Jan 23 2004, 1.06
21 Jan 24 2004, 1.06