10

我有一个带有日期列的 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,杰瑞

4

1 回答 1

16

您可以merge将 data.frame 与另一个 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,而 hh 中没有匹配的行。就个人而言,我认为最好让 NA 说这些是缺失值但你可以将它们设置为 0:

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

编辑

一般而言,您可以生成 hh,如@Arun 解决方案中所示:

      hh <- seq(min(dat$date), max(dat$date), by="days")
于 2013-01-20T12:56:54.323 回答