【问题标题】:Filling higher resolution zoo obj with data from lower resolution zoo obj用来自低分辨率动物园 obj 的数据填充高分辨率动物园 obj
【发布时间】:2015-04-29 02:18:49
【问题描述】:

我有一个每小时观察的动物园对象,以及一个每天观察的对象。 我的目标是通过索引将两个系列合并为一个对象,在其中我将每日值与同一日期的所有小时值进行匹配。

具体来说,第一个对象zX 包含没有缺失值的每小时观测值。第二个对象zY 包含某些特殊日期的列表。这些应该添加到zX,作为当天每次观察的虚拟变量。

library(zoo)

# 3 days of data with hourly resoulution
x <- runif(24*3)
indexHour <- as.POSIXct(as.Date("2015-01-01") + seq(0, (24*3-1)/24, 1/24))
zX <- zoo(x, indexHour)

# Only 2 days of data with daily resolution - one date is missing
y <- c(0, 2)
indexDay <- as.POSIXct(c(as.Date("2015-01-01"), as.Date("2015-01-3")))
zY <- zoo(y, indexDay)

预期输出

2015-01-01 00:00:00 0.78671677  0
2015-01-01 01:00:00 0.40625297  0
... 
2015-01-01 23:00:00 0.75371677  0
2015-01-02 00:00:00 0.34571677  NA
2015-01-02 01:00:00 0.40625297  NA
...
2015-01-02 23:00:00 0.12671677  NA
2015-01-03 00:00:00 0.54671677  2
2015-01-03 01:00:00 0.40625297  2
...
2015-01-03 23:00:00 0.23671677  2

【问题讨论】:

    标签: r xts zoo


    【解决方案1】:

    试试这个:

    z <- cbind(zX, zY =  coredata(zY)[match(as.Date(time(zX)), as.Date(time(zY)))])
    

    给予:

    > head(z, 30)
                                zX zY
    2014-12-31 19:00:00 0.20050507  0
    2014-12-31 20:00:00 0.98745944  0
    2014-12-31 21:00:00 0.02685118  0
    2014-12-31 22:00:00 0.82922065  0
    2014-12-31 23:00:00 0.77466073  0
    2015-01-01 00:00:00 0.87494486  0
    2015-01-01 01:00:00 0.39466493  0
    2015-01-01 02:00:00 0.49233047  0
    2015-01-01 03:00:00 0.19231866  0
    2015-01-01 04:00:00 0.91684281  0
    2015-01-01 05:00:00 0.48264758  0
    2015-01-01 06:00:00 0.08900482  0
    2015-01-01 07:00:00 0.48236308  0
    2015-01-01 08:00:00 0.30624266  0
    2015-01-01 09:00:00 0.48860905  0
    2015-01-01 10:00:00 0.18761759  0
    2015-01-01 11:00:00 0.37730202  0
    2015-01-01 12:00:00 0.51766405  0
    2015-01-01 13:00:00 0.30146257  0
    2015-01-01 14:00:00 0.66511275  0
    2015-01-01 15:00:00 0.66457355  0
    2015-01-01 16:00:00 0.92248105  0
    2015-01-01 17:00:00 0.17868851  0
    2015-01-01 18:00:00 0.71363131  0
    2015-01-01 19:00:00 0.82189523 NA
    2015-01-01 20:00:00 0.73392131 NA
    2015-01-01 21:00:00 0.95409518 NA
    2015-01-01 22:00:00 0.49774272 NA
    2015-01-01 23:00:00 0.27700155 NA
    2015-01-02 00:00:00 0.85833340 NA
    

    【讨论】:

      【解决方案2】:

      How to join (merge) data frames (inner, outer, left, right)? 中的连接语句的启发,以下代码产生了所需的输出:

      x <- cbind(x = coredata(zX), date = format(as.Date(index(zX))))
      y <- cbind(y = coredata(zY), date = format(as.Date(index(zY))))
      z <- zoo(merge(x, y, by = 'date', all.x=TRUE), index(zX))
      z <- z[,!colnames(z) %in% c('date')]
      View(z)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 2011-04-07
        • 1970-01-01
        • 2012-12-11
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多