У меня есть столбец в моих наборах данных, где периоды времени(Time
)представляют собой целые числа в диапазоне от -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
Как видите, Время 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)
Лучший способ добиться этого?