2013-01-20 19 views
8

Ich habe einen data.frame mit einer Datumsspalte. Diese Daten können oft auftreten, aber auch Nullzeit:Wie füllt man (Datum-) Lücken in 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 

Wie fülle ich die Datumsspalte in diesem data.frame so erhalte ich die folgende?

 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 

Jede Hilfe ist willkommen.

TIA, Jerry

Antwort

14

Sie können Ihre data.frame mit einem anderen data.frame containg alle Termine in Folge merge. hier nehme ich an, dass dat ihr original data.frame ist.

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 

Jetzt haben wir NA für jede Zeile in dat, die keine übereinstimmende Zeile in hh hat. Personaly, ich denke, es ist besser, NA muss sagen, dass Thesen Werte fehlen Aber man kann sie auf 0 gesetzt:

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

bearbeiten

für Allgemeinheit können Sie hh erzeugen, wie in @Arun gezeigt Lösung:

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

@Arun danke! Ich habe Ihre Idee verwendet, um die Seq-Daten im Allgemeinen zu generieren. – agstudy

+0

Vielen Dank. Ich habe es auch mit einem zweiten data.frame versucht. Aber ich habe immer eine df mit Datum und Wert Spalte für die Standardwerte verwendet. Nach dem Zusammenführen bekam ich immer zu viele Spalten. :-( – JerryWho

+0

@JerryWho Ich sehe, der Schlüssel zur Verwendung von Merge sind die Schlüssel Spalten ..Seit Sie geben die by.x und die by.y anderen Spalten spielt keine Rolle .. – agstudy