【发布时间】:2018-09-02 19:08:14
【问题描述】:
我有四分之一小时(15 分钟间隔)的频率数据。
sasan<-read.csv("sasanhz.csv", header = TRUE)
head(sasan)
Timestamp Avg.Hz
1 12/27/2017 12:15:00 AM 50.05
2 12/27/2017 12:30:00 AM 49.99
3 12/27/2017 12:45:00 AM 49.98
4 12/27/2017 01:00:00 AM 50.01
5 12/27/2017 01:15:00 AM 49.97
6 12/27/2017 01:30:00 AM 49.98
str(sasan)
'data.frame': 5501 obs. of 2 variables:
$ Timestamp: Factor w/ 5501 levels "01/01/2018 00:00:00 AM",..: 5112 5114 5116 5023 5025
5027 5029 5031 5033 5035 ...
$ Avg.Hz : num 50 50 50 50 50 ...
#change to posixct
sasan$Timestamp<-as.POSIXct(sasan$Timestamp, format="%m/%d/%Y %I:%M:%S %p")
在这个时间序列中,我在列“时间戳”中有一些缺失的数据时间,我想估算缺失的日期时间。
我试过zoo。
z<-zoo(sasan)
> head(z[1489:1497])
Timestamp Avg.Hz
1489 2018-01-11 12:15:00 50.02
1490 2018-01-11 12:30:00 49.99
1491 2018-01-11 12:45:00 49.94
1492 <NA> 49.98
1493 <NA> 50.02
1494 <NA> 49.95
在 zoo 包中使用“na.locf”函数输入日期和时间的 NA 值时,出现以下错误。
sasan_mis<-seq(start(z), end(z), by = times("00:15:00"))
> na.locf(z, xout = sasan_mis)
Error in approx(x[!na], y[!na], xout, ...) : zero non-NA points
In addition: Warning message:
In xy.coords(x, y, setLab = FALSE) : NAs introduced by coercion
如何克服这个错误?我如何估算这个丢失的日期时间?感谢您的建议。
dput(head(z))
structure(c("2017-12-27 00:15:00", "2017-12-27 00:30:00", "2017-12-27 00:45:00",
"2017-12-27 01:00:00", "2017-12-27 01:15:00", "2017-12-27 01:30:00",
"50.05", "49.99", "49.98", "50.01", "49.97", "49.98"), .Dim = c(6L,
2L), .Dimnames = list(NULL, c("Timestamp", "Avg.Hz")), index = 1:6, class = "zoo")
我用过的库包是
library(ggplot2)
library(forecast)
library(tseries)
library(xts)
library(zoo)
library(dplyr)
【问题讨论】:
-
zoo没有大写 Z。而且我认为错误不是来自na.locf调用,而是seq调用对象的结果由start重播。您从哪里获得start、stop和times函数?需要完整的代码(包括加载所有需要的包的代码)。从一个干净的会话开始,然后显示已完成的操作以及用于调试错误的 sessionInfo() 输出。 -
发布
dput(head(z))的输出。我猜start和stop无法使用具有非数据时间索引值的动物园对象存在问题。你的动物园对象有整数索引。 -
您需要在将它读入动物园之前修复它。完成后,您可以使用
read.zoo(my_data_frame)或zoo(data, index)将其读入动物园。
标签: r time-series zoo