R时间序列缺失值

3

我曾经在处理一个时间序列数据集,其中包含每小时的数据。由于数据中有一些缺失值,所以我试图创建一个包含正确时间值的数据框(time_seq),并与原始数据进行合并,以便缺失值变为“NA”。

> data

     date                 value
7980 2015-03-30 20:00:00  78389
7981 2015-03-30 21:00:00  72622
7982 2015-03-30 22:00:00  65240
7983 2015-03-30 23:00:00  47795
7984 2015-03-31 08:00:00  37455
7985 2015-03-31 09:00:00  70695 
7986 2015-03-31 10:00:00  68444

//converting the date in the data to POSIXct format.

> data$date <- format.POSIXct(data$date,'%Y-%m-%d %H:%M:%S') 

// creating a dataframe with the correct sequence of dates. 

> time_seq <- seq(from = as.POSIXct("2014-05-01 00:00:00"), 
              to = as.POSIXct("2015-04-30 23:00:00"), by = "hour")

> df <- data.frame(date=time_seq)

> df 

     date            
8013 2015-03-30 20:00:00
8014 2015-03-30 21:00:00
8015 2015-03-30 22:00:00
8016 2015-03-30 23:00:00
8017 2015-03-31 00:00:00
8018 2015-03-31 01:00:00
8019 2015-03-31 02:00:00
8020 2015-03-31 03:00:00
8021 2015-03-31 04:00:00
8022 2015-03-31 05:00:00
8023 2015-03-31 06:00:00
8024 2015-03-31 07:00:00

// merging with the original data

> a <- merge(data,df, x.by = data$date, y.by = df$date ,all=TRUE)

> a    
       date                 value
 4005  2014-07-23 07:00:00   37003
 4006  2014-07-23 07:30:00       NA
 4007  2014-07-23 08:00:00   37216
 4008  2014-07-23 08:30:00       NA

合并后的数值不正确且包含半小时的数值。如何解决这个问题?为什么合并结果是30分钟间隔,而我的数据框是按小时计算的?附注:我查看了这个问题:Fastest way for filling-in missing dates for data.table,并按照步骤操作,但没有帮助。

你能否使用dput函数来输出你的数据或其中的一部分。你的代码对我来说运行良好。 - user5363218
我导入了太多的库,导致方法冲突。一旦我重新启动环境,我的代码就可以正常工作了。感谢您的帮助! - Achuth
1个回答

0
你可以使用 padr 包来解决这个问题。
library(padr)
library(dplyr) #for the pipe operator
data %>%
  pad() %>%
  fill_by_value()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接