我有一个带有日期列的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, 杰里
答案 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")