Sagen sie, ich habe folgende data.table
geben Sie das Datum mit vorherigem Wert von Gruppe fehlt
library(data.table)
set.seed(123)
df <- as.data.table(data.frame(date = c("2017-01-01", "2017-01-05", "2017-01-08", "2017-01-01", "2017-01-05", "2017-01-08"),
value = rnorm(6),
mygroup = rep(LETTERS[1:2], each = 3)))
ich die fehlenden Daten mit dem ‚letzten‘ Wert von Gruppe füllen will. Der nächste, den ich gefunden habe, war this question, der zeigt, wie es ohne Gruppierung geht.
all_dates <- seq(from = as.Date("2017-01-01"),
to = as.Date("2017-01-08"),
by = "days")
df[J(all_dates), roll=Inf]
Ich brauche aber diese von der Gruppe zu tun und die by
führt zu einem Fehler mit
Fehler in
[.data.table
(df, J (all_dates), Rolle = Inf, durch = mygroup): ‚von‘ oder ‚keyby‘ geliefert wird, aber nicht j
Bitte 'df [, Datum: = as.Date (Datum)]' eher als verlangen, dass as.Date unzählige Male eingegeben wird. Wie auch immer, ich denke 'df [df [,. (Date = seq (erstes (Datum), letztes (Datum), von =" Tag ")), von = mygroup], an =. (Mygroup, Datum), roll = -Inf] 'könnte es tun ..? – Frank
Soll jede Gruppe einen anderen Datumsbereich haben oder wird es für jeden gleich sein (1.-8. Januar für dieses Beispiel)? Im letzteren Fall gibt es einige Fast-Duples mit CJ, wie https://stackoverflow.com/a/10473931/ – Frank
@Frank jede Gruppe könnte verschiedene Bereiche haben. Ihr anfänglicher Vorschlag führt derzeit zu einem Fehler "Ein" Argument sollte eine benannte atomare Vektor-Spalte sein, die angibt, welche Spalten in 'i' mit welchen Spalten in 'x' verbunden werden sollen. – cdeterman