Расширять еженедельные временные ряды на ежедневные - PullRequest
5 голосов
/ 22 марта 2012

У меня есть временной ряд 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 ]

12 голосов
/ 22 марта 2012

Показанные вами данные не являются серией xts. Я предполагаю, что именно так данные представлены в файле CSV. Чтобы ответить на ваш вопрос, я предполагаю, что у вас есть еженедельный объект XTS, w.

Слияние w с пустым объектом xts с индексом, который охватывает все дни, которые вы хотите. Затем используйте na.locf для результата.

d <- merge(w, xts(,seq(start(w),end(w),"days")))
d <- na.locf(d)
0 голосов
/ 22 марта 2012

Вот один подход:

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
...