У меня есть столбец в моих наборах данных, где периоды времени (Time
) являются целыми числами от a-b. Иногда может отсутствовать период времени для любой данной группы. Я хотел бы заполнить эти строки NA
. Ниже приведены примеры данных для 1 (из нескольких 1000) групп (групп).
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
Как видите, Time 3 отсутствует. Часто может отсутствовать один или несколько. Я могу решить это самостоятельно, но боюсь, что я не буду делать это самым эффективным способом. Мой подход заключался бы в создании функции, которая:
Создайте последовательность периодов времени от min(Time)
до max(Time)
Затем выполните setdiff
, чтобы получить отсутствующие значения Time
.
Преобразуйте этот вектор в data.frame
Извлеките уникальные переменные идентификатора (Id
и другие, не перечисленные выше) и добавьте это к этому файлу data.frame.
Объедините два.
Возврат из функции.
Таким образом, весь процесс будет выполнен следующим образом:
# 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)
Лучший способ добиться этого?