多个表的时间序列插值

3

我希望对R中多个表格的"date"、 "time"和"temp"列进行从5秒到1秒的线性插值:

旧的:

date         time     temp
1 22.05.11 16:00:00 23.653 
2 22.05.11 16:00:05 23.541 
...

新的:
date         time     temp 
1 22.05.11 16:00:00 23.653 
2 22.05.11 16:00:01 23.631 
3 22.05.11 16:00:02 23.609
...

如何做到这一点? 感谢任何帮助。
1个回答

7

使用zoo包中的na.approx和/或na.spline很容易实现。

# example data
set.seed(21)
z <- zoo(23+runif(10), seq(Sys.time(),length.out=10,by=5))
# merge your data with an empty zoo object that has an index value for
# every period you're interested in.
y <- merge(z, zoo(order.by=seq(start(z), end(z), by=1)))
xa <- na.approx(y)
xs <- na.spline(y)
plot(merge(xa,xs))

# To convert your existing data.frame to a zoo object:
z <- zoo(Data$temp,
  as.POSIXct(paste(Data$date, Data$time), format="%d.%m.%y %H:%M:%S"))
y <- merge(z, zoo(order.by=seq(start(z), end(z), by=1)))
xa <- na.approx(y)
xs <- na.spline(y)
plot(merge(xa,xs))
# Convert back to data.frame
dfxa <- data.frame(date=format(index(xa), "%d.%m.%y"),
                   time=format(index(xa), "%H:%M:%S"), temp=coredata(xa))

这里z是一个值,而我的数据是一个表格,所以我不太确定如何在这里实现... - Thomas Langkamp
1
我添加了代码,以向您展示如何将您的数据框(我怀疑您是否真正使用了“table”对象)转换为zoo对象。 - Joshua Ulrich

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