从R

时间:2016-03-18 05:59:47

标签: r time-series xts

我的时间序列(xts格式化)功耗数据为10分钟,为

                      power 
2015-08-01 00:00:00 101.22              
2015-08-01 00:10:00 122.941                
2015-08-01 00:20:00  67.596              
2015-08-01 00:30:00 184.180       

现在我想再添加3个列:

  1. 第2列:" Prevday1" - 其中" prevday1"将包含前一天的功耗读数。也就是说,如果当前指数是2015年8月5日,那么1100小时,那么" prevday1"应包含前一天的消费(2015年8月4日,1100小时)
  2. 第3列:" Prevday2" - 其中" prevday2"将包含前一天同一时刻前一天的功耗读数
  3. 第4列:" previnstant1" - 其中" previnstant1"将包含前一时刻的读数。在我的情况下,它将在10分钟之前耗电
  4. 新的xts对象会像

    一样
                      power       prevday1     prevday2   previnstant1
    2015-08-01 00:00:00 101.22       NA          NA          NA
    2015-08-01 00:10:00 122.941      :            :           :
    2015-08-01 00:20:00  67.596              
    2015-08-01 00:30:00 184.180   
           :
    

    现在的问题是我应该如何从历史xts对象中提取第2,3和4列的值。我从.indexday类型的函数开始,但无法获取值。 R中是否有任何特定函数使用xts索引提取这些类型的值?

1 个答案:

答案 0 :(得分:0)

经过一整天的努力,我想出了一个方法来填补剩下的三列。方法是:

  1. 提取/读取当前观察指数
  2. 使用步骤1的索引计算前两天的指数
  3. 读取与步骤2的索引相对应的值。这将分别填充第2列和第3列
  4. 查找时间序列数据的周期性,并使用此周期读取之前的值。这将填写专栏
  5. 代码是:

    #x is a xts time series object containing columns as shown in question
     dates <- as.Date(index(x),tz="Asia/Kolkata") # timestamp in date format
     for(i in 0:200) # no. of observations
          {
          a <- x[i,1] # Current observation 
          prev_d1 <- as.Date(index(a), tz ="Asia/Kolkata")-1 # previous day
          prev_d2 <- as.Date(index(a), tz ="Asia/Kolkata")-2 # previous to previous day
          prev_value1 <- x[dates %in% prev_d1 & .indexhour(x) %in% .indexhour(a) & .indexmin(x) %in% .indexmin(a)]$power
          prev_value2 <- x[dates %in% prev_d2 & .indexhour(x) %in% .indexhour(a) & .indexmin(x) %in% .indexmin(a)]$power
          x[i,"prevday1"] <- if(length(prev_value1)!=0) prev_value1 else NA
          x[i,"prevday2"] <- if(length(prev_value2)!=0) prev_value2 else NA
          x[i,"previnstant1"] <- ifelse(length(x[index(a)-frequency]$power)!=0, x[index(a)-frequency]$power, NA)# frequency represents periodicity values in terms of seconds
           }  
    
相关问题