[R] Problem with merging two zoo objects

Achim Zeileis Achim.Zeileis at uibk.ac.at
Fri Oct 15 21:56:56 CEST 2010


On Fri, 15 Oct 2010, Megh Dal wrote:

> Hi Gabor, please see the attached files which is in text format. I have 
> opened them on excel then, used clipboard to load them into R. Still 
> really unclear what to do.

I've read both files using read.zoo():

R> z1 <- read.zoo("dat1.txt", sep = ",", header = TRUE,
+    format = "%m/%d/%Y %H:%M:%S", tz = "")
Warning message:
In zoo(rval3, ix) :
   some methods for "zoo" objects do not work if the index entries in 
'order.by' are not unique
R> z2 <- read.zoo("dat2.txt", sep = ",", header = TRUE,
+    format = "%m/%d/%Y %H:%M:%S", tz = "")


Then, merge() does not work because some time indexes are not unique (and 
it would be unclear how these should be matched):

R> merge(z1, z2)
Error in merge.zoo(z1, z2) :
   series cannot be merged with non-unique index entries in a series

However, you can remove the duplicated, e.g., by computing averages:

R> z1a <- aggregate(z1, time(z1), mean)

Then

R> merge(z1a, z2)

works.

> Also can you please elaborate this term "index = list(1, 2), FUN = 
> function(d, t) as.POSIXct(paste(d, t))" in your previous file? In help, 
> it is given that:"If FUN is specified then read.zoo calls FUN with the 
> index as the first argument". I really could not connect your syntax 
> with help.

The way Gabor read the data, the index was in two separate columns 
(columns 1 and 2). Hence, he specified
   index = list(1, 2)
and then provided a function that would return a POSIXct object when 
called with two arguments
   FUN(column1, column2)

hth,
Z

> --- On Sat, 10/16/10, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
>
>> From: Gabor Grothendieck <ggrothendieck at gmail.com>
>> Subject: Re: [R] Problem with merging two zoo objects
>> To: "Megh Dal" <megh700004 at yahoo.com>
>> Cc: r-help at stat.math.ethz.ch
>> Date: Saturday, October 16, 2010, 12:11 AM
>> On Fri, Oct 15, 2010 at 2:20 PM, Megh
>> Dal <megh700004 at yahoo.com>
>> wrote:
>> > Dear all, I have following 2 zoo objects. However when
>> I try to merge those 2 objects into one, nothing is coming
>> as intended. Please see below the objects as well as the
>> merged object:
>> >
>> >
>> >> dat11
>> >                      V2   V3   V4   V5
>> > 2010-10-15 13:43:54 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:44:15 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:45:51 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:46:21 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:47:27 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:47:54 73.8 73.8 73.8 73.8
>> > 2010-10-15 13:49:51 73.7 73.7 73.7 73.7
>> >> dat22
>> >                      V2   V3   V4   V5
>> > 2010-10-15 12:09:12 74.0 74.0 74.0 74.0
>> > 2010-10-15 12:09:33 73.9 73.9 73.9 73.9
>> > 2010-10-15 12:20:36 74.0 74.0 74.0 74.0
>> > 2010-10-15 12:30:36 74.0 74.0 74.0 74.0
>> > 2010-10-15 12:41:03 73.7 73.7 73.7 73.7
>> >> merge(dat11, dat22)
>> >                    V2.dat11 V3.dat11
>> V4.dat11 V5.dat11 V2.dat22 V3.dat22 V4.dat22 V5.dat22
>> > 2010-10-15 12:09:12       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 12:09:33       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:43:54       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:44:15       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:45:51       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:46:21       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:47:27       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:47:54       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > 2010-10-15 13:49:51       NA       NA      
>> NA       NA       NA       NA       NA      
>> NA
>> > Warning messages:
>> > 1: In MATCH(x, x) == seq_len(length(x)) :
>> >  longer object length is not a multiple of shorter
>> object length
>> > 2: In MATCH(x, x) == seq_len(length(x)) :
>> >  longer object length is not a multiple of shorter
>> object length
>> >
>> > If somebody points me whether I went wrong, it would
>> be really great.
>> >
>> 
>> If I try it then it works properly so there is likely
>> something wrong
>> with your dat11 and dat22 objects.  If you provide the
>> problem
>> reproducibly one might be able to say more.
>> 
>> > Lines1 <- "Date Time
>> V2   V3   V4   V5
>> + 2010-10-15 13:43:54 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:44:15 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:45:51 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:46:21 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:47:27 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:47:54 73.8 73.8 73.8 73.8
>> + 2010-10-15 13:49:51 73.7 73.7 73.7 73.7"
>> >
>> > Lines2 <- "Date Time
>> V2   V3   V4   V5
>> + 2010-10-15 12:09:12 74.0 74.0 74.0 74.0
>> + 2010-10-15 12:09:33 73.9 73.9 73.9 73.9
>> + 2010-10-15 12:20:36 74.0 74.0 74.0 74.0
>> + 2010-10-15 12:30:36 74.0 74.0 74.0 74.0
>> + 2010-10-15 12:41:03 73.7 73.7 73.7 73.7"
>> >
>> > library(zoo)
>> > dat1 <- read.zoo(textConnection(Lines1), header =
>> TRUE,
>> + index = list(1, 2), FUN = function(d, t)
>> as.POSIXct(paste(d, t)))
>> Warning messages:
>> 1: closing unused connection 8 (Lines2)
>> 2: closing unused connection 7 (Lines1)
>> 3: closing unused connection 5 (Lines2)
>> 4: closing unused connection 4 (Lines1)
>> 5: closing unused connection 3 (Lines2)
>> > dat2 <- read.zoo(textConnection(Lines2), header =
>> TRUE,
>> + index = list(1, 2), FUN = function(d, t)
>> as.POSIXct(paste(d, t)))
>> > merge(dat1, dat2)
>>                
>>     V2.dat1 V3.dat1 V4.dat1 V5.dat1 V2.dat2
>> V3.dat2
>> V4.dat2 V5.dat2
>> 2010-10-15 12:09:12      NA   
>>   NA      NA     
>> NA    74.0    74.0
>> 74.0    74.0
>> 2010-10-15 12:09:33      NA   
>>   NA      NA     
>> NA    73.9    73.9
>> 73.9    73.9
>> 2010-10-15 12:20:36      NA   
>>   NA      NA     
>> NA    74.0    74.0
>> 74.0    74.0
>> 2010-10-15 12:30:36      NA   
>>   NA      NA     
>> NA    74.0    74.0
>> 74.0    74.0
>> 2010-10-15 12:41:03      NA   
>>   NA      NA     
>> NA    73.7    73.7
>> 73.7    73.7
>> 2010-10-15 13:43:54    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:44:15    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:45:51    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:46:21    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:47:27    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:47:54    73.8   
>> 73.8    73.8    73.8     
>> NA      NA
>>   NA      NA
>> 2010-10-15 13:49:51    73.7   
>> 73.7    73.7    73.7     
>> NA      NA
>>   NA      NA
>> 
>> -- 
>> Statistics & Software Consulting
>> GKX Group, GKX Associates Inc.
>> tel: 1-877-GKX-GROUP
>> email: ggrothendieck at gmail.com
>>


More information about the R-help mailing list