[R] [R-SIG-Finance] AsOf join in R

Brian G. Peterson brian at braverock.com
Wed Oct 5 12:21:34 CEST 2011


On Tue, 2011-10-04 at 23:41 -0400, Robert A'gata wrote:
> AsOf(A,B) should return
> 
>                     A       B
> 2011-09-01    10     1.1
> 2011-09-09    15     1.1     #  (because latest value B prior to
> 2011-09-09 is 1.1)
> 2011-09-10    20     1.5
> 2011-09-15    25     1.7
> 
> How do I write the above AsOf function in R? The merge function does
> not do what I want because it will align points that have the same
> time stamp together while what I want is actually latest value prior
> to timestamp in A. Any example would be greatly appreciated. Thank
> you. 

A <- xts(c(10,15,20,25),
order.by=as.POSIXct(c("2011-09-01","2011-09-09","2011-09-10","2011-09-15")))
B <- xts(c(1.1,1.5,1.3,1.7),
order.by=as.POSIXct(c("2011-08-31","2011-09-09","2011-09-11","2011-09-12")))
AsOf<-function(a,b) {
   x<-cbind(a,b) 
   x[,2]<-na.locf(x[,2]) 
   x[!is.na(x[,1])] 
}
AsOf(A,B)

#####################
#           ..1 ..2
#2011-09-01  10 1.1
#2011-09-09  15 1.5
#2011-09-10  20 1.5
#2011-09-15  25 1.7
#####################


-- 
Brian G. Peterson
http://braverock.com/brian/
Ph: 773-459-4973
IM: bgpbraverock



More information about the R-help mailing list