如何完成时间序列中的缺失值

时间:2019-05-04 11:43:17

标签: r dataframe time-series missing-data

我有数据集,哪些列是 datetime_idnum_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天至1-24,但每天总是随机丢失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 个答案:

答案 0 :(得分:1)

我不确定您是否正确理解了您的问题,所以我给您两个答案。我只使用基本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)

如果您有很多丢失的数据,并且想要一个伪Complet数据库为0,则可以为变量num_travel构建一个只有0的complet,然后添加您已经知道的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