【问题标题】:interpolate time series of multiple tables插入多个表的时间序列
【发布时间】:2011-06-29 10:33:32
【问题描述】:

我想将列“日期”、“时间”和“温度”从原始 5 到 R 中多个表的 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
...

我该怎么做? 谢谢你的帮助。

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    使用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 在这里是一个值,而我的数据是一个表,所以我不太确定如何在这里实现它...
    • 我添加了代码来向您展示如何将您的 data.frame(我怀疑您是否真的在使用 table 对象)转换为 zoo 对象。
    猜你喜欢
    • 2017-03-28
    • 2016-03-04
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多