The seq function has some interesting functions that you can use to easily generate a complete sequence of dates. For example, the following code can be used to generate a sequence of dates starting April 25th:
Edit: This function is documented in ?seq.Date
start = as.Date("2011/04/25") full <- seq(start, by='1 day', length=15) full [1] "2011-04-25" "2011-04-26" "2011-04-27" "2011-04-28" "2011-04-29" [6] "2011-04-30" "2011-05-01" "2011-05-02" "2011-05-03" "2011-05-04" [11] "2011-05-05" "2011-05-06" "2011-05-07" "2011-05-08" "2011-05-09"
Now use the same principle to generate some data with βmissingβ rows, generating a sequence for every second day:
partial <- data.frame( date=seq(start, by='2 day', length=6), value=1:6 ) partial date value 1 2011-04-25 1 2 2011-04-27 2 3 2011-04-29 3 4 2011-05-01 4 5 2011-05-03 5 6 2011-05-05 6
To answer your question, you can use a vector subscription or the match function to create a dataset using NA:
with(partial, value[match(full, date)]) [1] 1 NA 2 NA 3 NA 4 NA 5 NA 6 NA NA NA NA
To combine this result with the original complete data:
data.frame(Date=full, value=with(partial, value[match(full, date)])) Date value 1 2011-04-25 1 2 2011-04-26 NA 3 2011-04-27 2 4 2011-04-28 NA 5 2011-04-29 3 6 2011-04-30 NA 7 2011-05-01 4 8 2011-05-02 NA 9 2011-05-03 5 10 2011-05-04 NA 11 2011-05-05 6 12 2011-05-06 NA 13 2011-05-07 NA 14 2011-05-08 NA 15 2011-05-09 NA
Andrie
source share