如何在data.frame中填补(日期 - )空白?

时间:2013-01-20 12:32:55

标签: r dataframe

我有一个带有日期列的data.frame。这些日期可以多次出现,但也可以是零时间:

        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

如何填写此data.frame中的日期空白,以便我得到以下内容?

        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

欢迎任何帮助。

TIA, 杰里

1 个答案:

答案 0 :(得分:15)

您可以使用包含序列中所有日期的其他data.frame merge您的data.frame。在这里我假设dat是你的原始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

现在我们在dat中没有匹配行的每一行都有NA。 Personaly,我认为让NA说这些缺失值更好但是你可以将它们设置为0:

res$value[is.na(res$value)] <- 0

修改

一般来说,你可以生成hh,如@Arun解决方案所示:

      hh <- seq(min(dat$date), max(dat$date), by="days")