Skip to content

shift/lag when merge zoo

3 messages · j.k, Achim Zeileis

j.k
#
Hello alltogheter,
I have a little problem regarding merging to zoo series.
I want to merge two zoo series to reduce the timegaps between the stamps.
I use the following code:

data.test <-
as.POSIXct(seq(data.input01[1,1],data.input01[nrow(data.input01),1],900),tz="GMT")
data.troughput01 <- as.zoo(data.input01$V2)
index(data.troughput01) <- as.POSIXct(data.input01$V1,tz="GMT")
data.output01 <-merge(data.troughput01,zoo(,data.test))

They look like that:

head(data.test)
[1] "2008-01-01 00:00:00 GMT" "2008-01-01 00:15:00 GMT" "2008-01-01 00:30:00
GMT"
[4] "2008-01-01 00:45:00 GMT" "2008-01-01 01:00:00 GMT" "2008-01-01 01:15:00
GMT"
2008-01-01 00:00:00 2008-01-01 00:30:00 2008-01-01 01:00:00 2008-01-01
01:30:00 
           12.24180            11.27340            10.30500            
9.33654 
2008-01-01 02:00:00 2008-01-01 02:30:00 
            8.36811             7.62456
2008-01-01 01:00:00 2008-01-01 01:15:00 2008-01-01 01:30:00 2008-01-01
01:45:00 
            12.2418                  NA             11.2734                 
NA 
2008-01-01 02:00:00 2008-01-01 02:15:00 
            10.3050                  NA 


Are there any ideas why I have a lag of one hour?

At last I fill the NAs with na.approx:

data.output01 <-merge(data.troughput01,zoo(,data.test))
2008-01-01 01:00:00 2008-01-01 01:15:00 2008-01-01 01:30:00 2008-01-01
01:45:00 
           12.24180            11.75760            11.27340           
10.78920 
2008-01-01 02:00:00 2008-01-01 02:15:00 
           10.30500             9.82077
Maybe there are suggestions for other solutions of achieving the increase of
the resolution.

Thanks in advance
Johannes
#
On Wed, 15 Apr 2009, j.k wrote:

            
My suspicion is that the following happens:
   - You have not set the TZ environment variable and are living on a
     machine with Central European time.
   - Then setting the tz attribute is not very sticky in R. Simple
     combination c() of times will lose it.
   - as.character() does not display the tz attribute.

My machine also fulfills the first point on this list, hence:

R> tt <- strptime(c("2008-01-01 00:00:00", "2008-01-01 00:15:00"),
+    format = "%Y-%m-%d %H:%M:%S", tz = "GMT")

R> tt
[1] "2008-01-01 00:00:00 GMT" "2008-01-01 00:15:00 GMT"
R> c(tt[1], tt[2])
[1] "2008-01-01 01:00:00 CET" "2008-01-01 01:15:00 CET"

R> as.character(tt)
[1] "2008-01-01 00:00:00" "2008-01-01 00:15:00"
R> as.character(c(tt[1], tt[2]))
[1] "2008-01-01 01:00:00" "2008-01-01 01:15:00"

c() is applied in the merge() method for "zoo" objects. as.character() is 
used for printing. If you want to perform everything in "GMT", the 
simplest solution is to set "TZ".

R> Sys.setenv(TZ = "GMT")

R> tt
[1] "2008-01-01 00:00:00 GMT" "2008-01-01 00:15:00 GMT"
R> c(tt[1], tt[2])
[1] "2008-01-01 00:00:00 GMT" "2008-01-01 00:15:00 GMT"

R> as.character(tt)
[1] "2008-01-01 00:00:00" "2008-01-01 00:15:00"
R> as.character(c(tt[1], tt[2]))
[1] "2008-01-01 00:00:00" "2008-01-01 00:15:00"

See also Gabor and Thomas's help desk article in R News 4(1).

hth,
Z
j.k
#
Worked perfect...
Thanks a lot!

Johannes
j.k wrote: