Najszybszy sposób dodawania wierszy dla brakujących kroków czasowych?
Mam kolumny w moich zestawach danych, w których okresy (Time
) są liczbami całkowitymi od a-b. Czasami może brakować okresów dla dowolnej grupy. Chciałbym wypełnić te wierszeNA
. Poniżej podano przykładowe dane dla 1 (z kilku 1000) grup.
<code>structure(list(Id = c(1, 1, 1, 1), Time = c(1, 2, 4, 5), Value = c(0.568780482159894, -0.7207749516298, 1.24258192959273, 0.682123081696789)), .Names = c("Id", "Time", "Value"), row.names = c(NA, 4L), class = "data.frame") Id Time Value 1 1 1 0.5687805 2 1 2 -0.7207750 3 1 4 1.2425819 4 1 5 0.6821231 </code>
Jak widać, brakuje czasu 3. Często brakuje jednego lub więcej. Mogę to rozwiązać sam, ale obawiam się, że nie zrobiłbym tego w najbardziej efektywny sposób. Moim podejściem byłoby stworzenie funkcji, która:
Wygeneruj sekwencję okresów odmin(Time)
domax(Time)
Następnie wykonajsetdiff
zgubićTime
wartości.
Konwertuj ten wektor na adata.frame
Wyciągnij unikalne zmienne identyfikatora (Id
i inne nie wymienione powyżej) i dodaj to do tej ramki danych.
Połącz oba.
Powrót z funkcji.
Cały proces zostałby wtedy wykonany jak poniżej:
<code> # Split the data into individual data.frames by Id. temp_list <- dlply(original_data, .(Id)) # pad each data.frame tlist2 <- llply(temp_list, my_pad_function) # collapse the list back to a data.frame filled_in_data <- ldply(tlist2) </code>
Lepszy sposób osiągnięcia tego celu?