Seite 1 von 1

Datums-Lücken in Datensatz durch zusätzliche Zeilen schließen

Verfasst: Mi Okt 14, 2020 4:58 pm
von Bugs
Hallo,

ich habe folgendes Problem:

Ich habe einen Datensatz mit Unternehmen und Zeitpunkten des Monats Dezember, an denen eine Preisänderung im Unternehmen stattgefunden hat.

Beispiel:
Spalte 1: Unternehmens-ID (character)
Spalte 2: Datum + Uhrzeit (POSIXct)

Der Datensatz ist sehr groß. Es handelt sich um 15.895 Unternehmen. Für die meisten Unternehmen gibt es mehrere Preisänderungen pro Tag (ca. 10-20). Allerdings gibt es auch einige wenige Unternehmen, die z.B. im ganzen Monat nur 5 Preisänderungen haben, sodass für dieses Unternehmen also nur diese 5 Tage (5 Zeilen) im Datensatz auftauchen.
Gibt es nun eine Möglichkeit für Fälle wie diesen zusätzliche Zeilen mit den Daten zu kreieren, an denen es keine Preisänderung gab, sodass jedes Unternehmen mindestens 1 Zeile für jeden Tag besitzt (mindestens 31 Zeilen pro Unternehmen)?

Danke im Voraus :)

Re: Datums-Lücken in Datensatz durch zusätzliche Zeilen schließen

Verfasst: Mi Okt 14, 2020 6:35 pm
von Athomas
Ich gehe davon aus, dass Du nicht Dein "wahres" Problem zur Diskussion stellst, sondern einen (von Dir als zielführend angesehenen) Schritt zur Lösung dieses Problems!

Ist es möglich, dass Du "eigentlich" wissen möchtest, welchen Preis die Unternehmen zu vorgegebenen Zeitpunkten verlangt haben?

Und: bitte stell Spieldaten zur Verfügung, damit man die Tipps direkt ausprobieren/demonstrieren kann!

Re: Datums-Lücken in Datensatz durch zusätzliche Zeilen schließen

Verfasst: Mi Okt 14, 2020 8:56 pm
von EDi

Re: Datums-Lücken in Datensatz durch zusätzliche Zeilen schließen

Verfasst: Do Okt 15, 2020 9:17 am
von Bugs
?tidyr::complete
Auf den complete Befehl bin ich auch schon gestoßen.
Hier ein Beispiel zum Aufbau meines Datensatzes:
Die meisten Unternehmen sehen aus wie das Unternehmen ABC1234 (mehrere Einträge pro Tag)
Komplettieren möchte ich jetzt die Fälle, die so aussehen wie das Unternehmen DEF5678.

Code: Alles auswählen

date                         ID 
1   2019-12-01 00:00:04 	ABC1234
2   2019-12-01 06:05:08 	ABC1234
3   2019-12-01 11:18:51		ABC1234
4   2019-12-02 04:01:22		ABC1234
5   2019-12-02 10:44:17		ABC1234
6   2019-12-03 12:01:30		ABC1234
7   2019-12-03 14:20:06		ABC1234
...
93  2019-12-02 22:13:05		DEF5678
94  2019-12-15 05:44:02		DEF5678
95  2019-12-16 13:14:22		DEF5678
96  2019-12-22 07:12:34		DEF5678
97  2019-12-30 19:02:51		DEF5678
98  2019-12-01 10:08:11		GHI9999
99  2019-12-01 12:48:12		GHI9999
...

Ich habe mal zum Testen ein subset mit einem Unternehmen, das nur 6 Tage mit Preisänderungen hat, erstellt.
Diesem habe ich eine neue Spalte "date2" hinzugefügt, die sich aus der POSIXct Spalte nur das Datum zieht.

Mit folgendem Befehl:

Code: Alles auswählen

df <- df %>%
mutate(date2 = as.Date(date))
Folgender Befehl hat dann auch das gewünschte Ergebnis gebracht:

Code: Alles auswählen

df <- df %>%
complete(date2 = seq.Date(as.Date("2019-12-01"), as.Date("2019-12-31"), by="day"))
Als ich das gleiche dann aber an meinem Orginal-Datensatz ausprobiert habe, hat sich nichts getan.
Eventuell liegt es daran, dass in diesem alle Daten vom 01.12. bis zum 31.12. vorkommen (nur eben nicht für jedes Unternehmen) und R deshalb nicht weiß, was es komplettieren soll?

Ich denke grundsätzlich ist tidyr::complete aber der richtige Weg.

Wenn jemand eine Idee hat, wie das auch für den Original-Datensatz klappen kann, gerne her damit :lol:

LG

Re: Datums-Lücken in Datensatz durch zusätzliche Zeilen schließen

Verfasst: Do Okt 15, 2020 7:22 pm
von EDi
Bitte ein reproduzierbares Beispiel posten.