On Wed, 15 Apr 2009, j.k wrote:


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"

head(data.troughput01)
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

head(data.output01)
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?

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

At last I fill the NAs with na.approx:

data.output01 <-merge(data.troughput01,zoo(,data.test))

head(data.output01)
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

--
View this message in context: 
http://www.nabble.com/shift-lag-when-merge-zoo-tp23057867p23057867.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.



______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to