2013-01-20 29 views
8

Tôi có một data.frame với cột ngày tháng. Những ngày này có thể xảy ra nhiều lần, nhưng cũng không có thời gian:Làm cách nào để lấp đầy khoảng trống (ngày tháng) trong 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 

Làm cách nào để điền vào các khoảng trống ngày trong dữ liệu này.

 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 

Mọi trợ giúp đều được hoan nghênh.

TIA, Jerry

Trả lời

14

Bạn có thể merge data.frame của bạn với một data.frame có chứa có tất cả các ngày trong chuỗi. ở đây tôi giả định rằng dat là data.frame ban đầu của bạn.

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 

Bây giờ chúng tôi có NA cho mỗi hàng trong dat không có hàng phù hợp trong hh. Personaly, tôi nghĩ rằng đó là tốt hơn để có NA để nói rằng luận án đang thiếu giá trị Nhưng bạn có thể đặt chúng vào 0:

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

Sửa

cho tính tổng quát, bạn có thể tạo ra hh như trong @Arun giải pháp:

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

@Arun thanks! Tôi đã sử dụng ý tưởng của bạn để tạo ra các ngày seq trong trường hợp chung. – agstudy

+0

Cảm ơn rất nhiều. Tôi đã thử với một data.frame thứ hai, quá. Nhưng tôi luôn sử dụng df với cột date AND value cho các giá trị mặc định. Vì vậy, sau khi hợp nhất, tôi luôn có quá nhiều cột. :-( – JerryWho

+0

@JerryWho Tôi thấy, chìa khóa để sử dụng hợp nhất là các cột khóa .. kể từ khi bạn cung cấp cho by.x và by.y các cột khác không quan trọng .. – agstudy

Các vấn đề liên quan