【问题标题】:Interpolating timeseries插值时间序列
【发布时间】:2012-10-15 22:30:06
【问题描述】:

我有两组具有不同时间戳的数据。一组数据包含校准数据,另一组包含样本数据。校准的频率远低于样本。

我想做的是将校准数据(低频)插入到样本时间序列(高频)上。

sam <- textConnection("time, value
01:00:52, 256
01:03:02, 254
01:05:23, 255
01:07:42, 257
01:10:12, 256")

cal <- textConnection("time, value
01:01:02, 252.3
01:05:15, 249.8
01:10:02, 255.6")

sample <- read.csv(sam)

sample$time <- as.POSIXct(sample$time, format="%H:%M:%S")

calib <- read.csv(cal)

calib$time <- as.POSIXct(calib$time, format="%H:%M:%S")

(我看到的)最大的问题是数据的频率随机变化。

你们有没有做过类似的事情?是否有一个 chron 或 zoo 函数可以满足我的要求(将低频数据插入到两个 ts 都是随机的高频数据上)?

【问题讨论】:

    标签: r time-series linear-interpolation


    【解决方案1】:

    我会使用 zoo(或 xts)并这样做:

    library(zoo)
    # Create zoo objects
    zc <- zoo(calib$value, calib$time)    # low freq
    zs <- zoo(sample$value, sample$time)  # high freq
    # Merge series into one object
    z <- merge(zs,zc)
    # Interpolate calibration data (na.spline could also be used)
    z$zc <- na.approx(z$zc, rule=2)
    # Only keep index values from sample data
    Z <- z[index(zs),]
    Z
    #                      zs       zc
    # 2012-10-25 01:00:52 256 252.3000
    # 2012-10-25 01:03:02 254 251.1142
    # 2012-10-25 01:05:23 255 249.9617
    # 2012-10-25 01:07:42 257 252.7707
    # 2012-10-25 01:10:12 256 255.6000
    

    【讨论】:

      【解决方案2】:

      您也可以像这样使用approx 函数,它会容易得多。只需确保您正在使用数据框即可。另外,请使用as.POSIXct确保校准中的列格式和样本数据集中的格式相同。

       calib <- data.frame(calib); sample <- data.frame(sample)
      
       IPcal <- data.frame(approx(calib$time,calib$value, xout = sample$time, 
                       rule = 2, method = "linear", ties = mean))
      
       head(IPcal)
      
      #                x        y
      #1 2017-03-22 01:00:52 252.3000
      #2 2017-03-22 01:03:02 251.1142
      #3 2017-03-22 01:05:23 249.9617
      #4 2017-03-22 01:07:42 252.7707
      #5 2017-03-22 01:10:12 255.6000
      

      approxfun documentation 上阅读有关approx 的更多信息。

      【讨论】:

        猜你喜欢
        • 2017-08-13
        • 1970-01-01
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-30
        • 2018-05-14
        • 2018-02-02
        相关资源
        最近更新 更多