我尝试在此处插入完整的csv的meterValue,https://drive.google.com/open?id=18cwtw-chAB-FqqCesXZJ-6NB6eHFJlgQ
localminute,dataid,meter_value
2015-10-03 09:51:53,6578,157806
2015-10-13 13:41:49,6578,158086
:
:
2016-01-17 16:00:33,6578,164544 #end of meter_value data for ID=6578
基于@G。建议使用Grothendieck,在z.interpolate(合并数据)时出现错误
D6578z <- read.csv.zoo("test_6578.csv")[,2]
D6578zd <- to.daily(D6578z)[,4]
#Warning messages:
#1: In zoo(xx, order.by = index(x), ...) : some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique
#2: In zoo(rval, index(x)[i]) :some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique
test_6578t <- time(D6578zd)
plot(D6578zd,type="p",xaxt="n", pch=19, col="blue",cex=1.5)
diff(test_6578t)
t.daily6578 <- seq(from =min(test_6578t),to=max(test_6578t),by="1 day")
dummy6578 <- zoo(,t.daily6578)
z.interpolated <- merge(D6578zd,dummy6578,all=TRUE)
*#Error in merge.zoo(D6578zd, dummy6578, all = TRUE) : series cannot be merged with non-unique index entries in a series*
在@G提供的插值数据中,R代码的解决方案需要一个小时的时差。格洛腾迪克,如下。
嗨@G。 Grothendieck,感谢您提供解决方案代码。关于您的代码,我有一些问题需要与您澄清。
`line1: to.hour <- function(x) as.POSIXct(trunc(as.POSIXct(x, origin = "1970-01-01"), "hour"))
line2: z <- read.csv.zoo("test_6578.csv", FUN = to.hour, aggregate = function(x) tail(x, 1))`
`line3: zz <- na.approx(as.zoo(as.ts(z)))`
`line4: time(zz) <- as.POSIXct(time(zz), origin = "1970-01-01")`
在第1行中,为什么在`trunc(as.POSIXct(x,origin =“ 1970-01-01”)?
我知道“ trunc”函数会舍入datetime值。在第2行中,此代码是什么意思“ FUN = to.hour,总计 = function(x)tail(x,1)”起作用?
因为我不明白什么是tail(x,1)。我提取了
z
CSV文件中的功能,我观察到只有dataid和meter_value 使用“ read.csv.zoo”功能时会生成列。在第3行中,我了解到
zz
函数可提供插值数据 但是我不完全理解代码“ na.approx(as.zoo(as.ts(z)))”, 由于z
已经是read.csv.zoo之后的动物园系列,所以为什么我们仍然有 在“ na.approx”行中使用“ as.zoo”和“ as.ts”?Zooreg和Zooreg系列有什么区别?
在第4行中,“ time(zz)”是“ zz”函数的索引吗?
预先感谢您的解释。
答案 0 :(得分:0)
使用read.csv.zoo
转换为Date
类(汇总重复的日期,以便使用最后一个日期)来读取文件。然后转换为ts
并返回到Zoo,它将用空域填充空天。现在使用na.approx
填写NA值。由于ts
无法表示Date
类,因此所得的序列将具有表示日期的数字,因此请将其转换回去。
library(zoo)
z <- read.csv.zoo("test_6578.csv", FUN = as.Date, aggregate = function(x) tail(x, 1))
zz <- na.approx(as.zoo(as.ts(z)))
time(zz) <- as.Date(time(zz))
在评论中,有人声称出口处有孔,但事实并非如此。连续时间之间的差异等于1,并且没有NA。
table(diff(time(zz)))
## 1
## 106
any(is.na(zz))
## [1] FALSE
any(is.na(time(zz)))
## [1] FALSE
这里有一个例子,说明了一个小时而不是一天的差异。
to.hour <- function(x) as.POSIXct(trunc(as.POSIXct(x, origin = "1970-01-01"), "hour"))
z <- read.csv.zoo("test_6578.csv", FUN = to.hour, aggregate = function(x) tail(x, 1))
zz <- na.approx(as.zoo(as.ts(z)))
time(zz) <- as.POSIXct(time(zz), origin = "1970-01-01")
plot(zz[, 2], type = "p", pch = ".")