Как я могу заполнить пропущенные значения во временных рядах - PullRequest
0 голосов
/ 04 мая 2019

У меня есть набор данных, столбцы которого date, time_id, num_travel.например,

date       time_id  num_travel
02/25/2013       6        23
02/25/2013       7        20
02/25/2013       8        55
02/25/2013       9        89
02/25/2013       10       150
02/25/2013       11       100

...
02/27/2013       1        20
...

time_id означает, какой час в эту дату.
num_travel означает количество поездок.

time_id диапазон составляет 1 ~ 24 в течение 1 дня, но всегда терял 1 ~ 6 случайно на каждый день.Как я могу добавить строки с num_travel (инициализировать это значение 0), такие как

 03/24/2013     2      0   # (the data not exist in dataset, but need to be added)

Поскольку набор данных потерял time_id от 1 до 6 случайным образом, очень трудно построить этистрок.Мне нужна помощь в R для очистки данных.

1 Ответ

1 голос
/ 04 мая 2019

Я не уверен, что правильно понял ваш вопрос, поэтому я дам вам два ответа. Я просто использую базовый R.

library(lubridate)

df <- data.frame(date = mdy(c(rep("02/25/2013", 6), "02/27/2013")),
                 time_id = c(6:11, 1),
                 num_travel = c(23, 20, 55, 89, 150, 100, 20))

want_to_add <- data.frame(date = mdy("03/27/2013"),
                          time_id = 2,
                          num_travel = 0)

Первый ответ, если вам нужно добавить всего несколько строк:

rbind(df, want_to_add)

Если у вас много пропущенных данных и вы хотите создать базу данных с псевдо-завершением с 0, вы можете создать одно завершение с только 0 для переменной num_travel, а затем добавить то, что вы уже знаете о num_travel:

# vector of Date
date_start <- as.POSIXct("2013-02-25 01:00:00", tz = "GMT")
date_end <- as.POSIXct("2013-03-27 01:00:00", tz = "GMT")

Date <- seq(date_start, date_end, by="hour")

# complet data set with 0 for num_travel
df_res <- data.frame(date = as.Date(Date), time_id = hour(Date) + 1, num_travel = 0)

# add what you know 
df_res[paste(df_res$date, df_res$time_id) %in% paste(df$date, df$time_id), ]$num_travel = df$num_travel
...