Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fill (date-) gaps in data.frame?

Tags:

dataframe

r

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

like image 312
JerryWho Avatar asked Jan 20 '13 12:01

JerryWho


1 Answers

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")
like image 109
agstudy Avatar answered Sep 20 '22 06:09

agstudy