2012-04-08 9 views
1

Ich habe einen Datensatz, der wie folgt aussieht, den ich zu einem monatlichen Panel-Datensatz erweitern möchte.Erweitern Sie unsymmetrische Daten in das monatliche Panel

ID | start_date | end_date | event_type | 
1 | 01/01/97 | 08/01/98 |   1 | 
2 | 02/01/97 | 10/01/97 |   1 | 
3 | 01/01/96 | 12/01/04 |   2 | 

Einige Fälle dauern länger als andere. Ich habe herausgefunden, wie die Daten zu einer jährlichen Konfiguration zu erweitern, indem das Jahr von jedem Zeitpunkt herausziehen und dann mit:

year <- ddply(df, c("ID"), summarize, year = seq(startyear, endyear)) 

gefolgt von:

month <- ddply(year, c("ID"), summarize, month = seq(1, 12)) 

Das Problem bei diesem Ansatz ist, dass Es wird nicht die richtige Zahl für den Monat zugewiesen, dh Januar = 1, und so spielt es nicht gut mit einem Ereignisdatensatz, mit dem ich es schließlich zusammenführen möchte, wo ich auf , ID passen würde, und month. Hilfe wäre willkommen. Hier ist eine direkte Verbindung zu dem Datensatz, den ich erweitern möchte (.xls): http://db.tt/KeLRCzr9. Hoffentlich habe ich genug Informationen beigefügt, aber lassen Sie mich bitte wissen, wenn weitere Informationen benötigt werden.

Antwort

0
ddply(df, .(ID), summarize, dt = seq.Date(start_date, end_date, by = "month")) 

Angenommen, start_date und end_date sind bereits Datumsobjekte. Joran hat mich jedoch näher gebracht, also nochmal, danke für die Hilfe.

1

Sie könnten etwas mehr wie diese versuchen:

ddply(df,.(ID),transform,dt = seq.Date(as.Date(start_date,"%m/%d/%Y"),as.Date(end_date,"%m/%d/%Y"),by = "month")) 

Es wird wahrscheinlich eine Menge Warnungen sein, die mit den Zeilennamen zu tun, und ich kann nicht garantieren, dass dies funktionieren wird, da der Datensatz Die Verknüpfung mit entspricht nicht dem von Ihnen angegebenen Beispiel. Für den Anfang nehme ich an, dass Sie das Start- und Enddatum bereinigt haben, da sie in verschiedenen Formaten in der .xls-Datei erscheinen.

+0

Ich verstehe nicht, was anders ist, außer den Namen vonc. Die Spalten, die ich verwende, sind 'ConflEp',' EpStartDate' und 'EpEndDate'. Ja, ich habe die Daten bereinigt, die jetzt alle in einem "% Y-% m-% d" -Format sind. Hier ist ein Link zur bereinigten Version, sorry, dass ich nicht daran gedacht habe. http://db.tt/KeLRCzr9 Ich habe diesen Fehler nachdem ich das ausgeführt habe: Fehler in seq.int (r1 $ mon, 12 * (zu0 $ year - r1 $ year) + to0 $ mon, by): 'to' muss endlich sein – Zach

+0

@Zach Hast du das Datumsformat angepasst? Ich habe diesen Code basierend auf dem von Ihnen angegebenen Beispiel mit den Daten in% m /% d /% Y geschrieben. – joran

+0

Ja, tat ich. Ich habe sie in "% Y-% m-% d" konvertiert und dann folgendes ausgeführt: test <- ddply (data1,. (ConflEp), transformieren, dt = seq.Date (EpStartDate, EpEndDate, by = "month")). Ich habe das "zu" muss endlich sein Fehler und eine Warnung, dass "Zeilennamen wurden aus einer kurzen Variable gefunden und wurden verworfen" – Zach

Verwandte Themen