Самый быстрый способ добавить строки для отсутствующих временных шагов?

У меня есть столбец в моих наборах данных, где периоды времени(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)

Лучший способ добиться этого?

33
задан Henrik 21 February 2019 в 12:24
поделиться