I have a data.frame with a date-column. These dates can occur many times, but also zero-time:
date value
1 2013-01-01 5
2 2013-01-01 3
3 2013-01-03 3
4 2013-01-04 3
5 2013-01-04 1
6 2013-01-06 1
How do I fill the date-gaps in this data.frame so I get the following?
date value
1 2013-01-01 5
2 2013-01-01 3
3 2013-01-02 0
4 2013-01-03 3
5 2013-01-04 3
6 2013-01-04 1
7 2013-01-05 0
8 2013-01-06 1
Any help is welcome.
TIA, Jerry
You can merge
your data.frame with another data.frame containg all the dates in sequence. here I assume that dat is your original data.frame.
hh<- data.frame(date=seq(as.Date("2013-01-01"), as.Date("2013-01-6"), by="days"))
>res <- merge(dat,hh,by.x='date',by.y='date',all.x=T,all.y=T)
date value
1 2013-01-01 5
2 2013-01-01 3
3 2013-01-02 NA
4 2013-01-03 3
5 2013-01-04 3
6 2013-01-04 1
7 2013-01-05 NA
8 2013-01-06 1
Now we have NA for each row in dat that has no matching row in hh. Personaly, I think it is better to have NA to say that theses are missing values But you can set them to 0:
res$value[is.na(res$value)] <- 0
Edit
for generality you can generate hh as shown in @Arun solution:
hh <- seq(min(dat$date), max(dat$date), by="days")
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With