Re: [R] Quick question on merging two time-series of different frequencies

2007-05-11 Thread Gabor Grothendieck
Its not clear to me what you want but play around with these
forms of merge.zoo:

merge(x, y) # all = TRUE
merge(x, y, all = FALSE)
merge(x, y, all = c(TRUE, FALSE))
merge(x, y, all = c(FALSE, TRUE))


On 5/11/07, Patnaik, Tirthankar [EMAIL PROTECTED] wrote:
 Achim,
Thanks so much! I should've probably explained what I was trying
 to do better (Just an LOCF!). As you've correctly pointed out I'm trying
 to merge two time series where the first series is daily (price data),
 and the second series is irregular (earnings, balance-sheet data).

 While using an LOCF would certainly solve my problem (In SAS, one used
 the DOW (Dorfman-Whitlock) loop for this purpose, but I didn't know it
 existed in R), to account for the possibility of a timestamp in the
 irregular times series _not_ having an equivalent in the regular series
 (wherein the na.locf would introduce an NA in the regular series), I
 just inner-join the regular series with the result.

  x - zoo(rnorm(11), as.Date(2000-01-01) + c(1:6,8:10))

 Regular series: Doesn't have 7.

  y - zoo(rnorm(4), as.Date(2000-01-01) + c(0, 3, 7, 10))

 Irregular series: Has 7.

  z - merge(x, y)

 Full join between x and y.

  z1 - na.locf(z)

 The LOCF. Fills up the regular series too.

  z2 - merge(x,na.locf(merge(x,y))[,2],all=FALSE)

 Getting rid of the extraneous observation in x.

 Results:

  x
 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07
 2000-01-09
  1.2194692 -0.6081166 -1.1852422  1.0577249  0.3940365 -0.1742952
 -0.8321219
 2000-01-10 2000-01-11
 -0.8628410  1.5109680
  y
  2000-01-01  2000-01-04  2000-01-08  2000-01-11
 -0.03331723  0.04525300 -0.68003282  0.20282930
  z
x   y
 2000-01-01 NA -0.03331723
 2000-01-02  1.2194692  NA
 2000-01-03 -0.6081166  NA
 2000-01-04 -1.1852422  0.04525300
 2000-01-05  1.0577249  NA
 2000-01-06  0.3940365  NA
 2000-01-07 -0.1742952  NA
 2000-01-08 NA -0.68003282
 2000-01-09 -0.8321219  NA
 2000-01-10 -0.8628410  NA
 2000-01-11  1.5109680  0.20282930
  z1
x   y
 2000-01-02  1.2194692 -0.03331723
 2000-01-03 -0.6081166 -0.03331723
 2000-01-04 -1.1852422  0.04525300
 2000-01-05  1.0577249  0.04525300
 2000-01-06  0.3940365  0.04525300
 2000-01-07 -0.1742952  0.04525300
 2000-01-08 -0.1742952 -0.68003282
 2000-01-09 -0.8321219 -0.68003282
 2000-01-10 -0.8628410 -0.68003282
 2000-01-11  1.5109680  0.20282930
 attr(,na.action)
 [1] 1
 attr(,class)
 [1] omit
  z2
x na.locf(merge(x, y))[, 2]
 2000-01-02  1.2194692   -0.03331723
 2000-01-03 -0.6081166   -0.03331723
 2000-01-04 -1.18524220.04525300
 2000-01-05  1.05772490.04525300
 2000-01-06  0.39403650.04525300
 2000-01-07 -0.17429520.04525300
 2000-01-09 -0.8321219   -0.68003282
 2000-01-10 -0.8628410   -0.68003282
 2000-01-11  1.51096800.20282930

 Could you also give a quick example of a left- and right join in zoo? I
 tried all.x=TRUE, and all.y=FALSE but they don't seem to work.

 Best,
 -Tir

 --
 Tirthankar Patnaik
 India Strategy
 Citigroup Investment Research
 +91-22-6631 9887


 -Original Message-
 From: Achim Zeileis [mailto:[EMAIL PROTECTED]
 Sent: Thursday, May 10, 2007 10:42 PM
 To: Patnaik, Tirthankar [GWM-CIR]
 Cc: r-help@stat.math.ethz.ch
 Subject: Re: [R] Quick question on merging two time-series of different
 frequencies

 On Thu, 10 May 2007, Patnaik, Tirthankar  wrote:

  Hi,
A quick beginner's question. I have two time series, A with
 daily
  data, and another B with data at varying frequencies, but mostly
  annual. Both the series are sorted ascending.
 
  I need to merge these two series together in the following way: For
  any entry of A, the lookup should match with B until we find an entry
  of B that's larger than A's.

 I'm not sure what exactly you want. I assume that A and B are not the
 observations but the corresponding time stamps, right?

 In any case, I guess that the zoo package will have some useful
 functionality for what you want, e.g., if you have data like
  library(zoo)
  set.seed(123)
  x - zoo(rnorm(11), as.Date(2000-01-01) + 0:10)
  y - zoo(rnorm(4), as.Date(2000-01-01) + c(0, 3, 7, 10)) then you
 can merge them with
  z - merge(x, y)
 and then eliminate NAs, e.g. by
  na.locf(z)
 or you could aggregate() the x series so that it becomes a monthly
 series or something like that.

 See
  vignette(zoo, package = zoo)
 for more information.

 Best,
 Z

  For all A[i], i = 1,...,N and B[j], j=1,...M
 
  Match with B[j] where A[i] = B[j]
 
  When A[i]  B[j], match with B[j+1] where A[i] = B[j+1]
 
  Basically the less-frequent attributes stay true for a stock while the

  daily prices change.
 
  One example of this is the vlookup function in Excel with the TRUE
  option.
 
  So we have an implementation of this in R

[R] Quick question on merging two time-series of different frequencies

2007-05-10 Thread Patnaik, Tirthankar
Hi,
A quick beginner's question. I have two time series, A with
daily data, and another B with data at varying frequencies, but mostly
annual. Both the series are sorted ascending.

I need to merge these two series together in the following way: For any
entry of A, the lookup should match with B until we find an entry of B
that's larger than A's. 

For all A[i], i = 1,...,N and B[j], j=1,...M

Match with B[j] where A[i] = B[j]

When A[i]  B[j], match with B[j+1] where A[i] = B[j+1]

Basically the less-frequent attributes stay true for a stock while the
daily prices change.

One example of this is the vlookup function in Excel with the TRUE
option. 

So we have an implementation of this in R?

TIA and best,
-Tir

__
R-help@stat.math.ethz.ch 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.


Re: [R] Quick question on merging two time-series of different frequencies

2007-05-10 Thread jim holtman
?findInterval

On 5/10/07, Patnaik, Tirthankar [EMAIL PROTECTED] wrote:
 Hi,
A quick beginner's question. I have two time series, A with
 daily data, and another B with data at varying frequencies, but mostly
 annual. Both the series are sorted ascending.

 I need to merge these two series together in the following way: For any
 entry of A, the lookup should match with B until we find an entry of B
 that's larger than A's.

 For all A[i], i = 1,...,N and B[j], j=1,...M

 Match with B[j] where A[i] = B[j]

 When A[i]  B[j], match with B[j+1] where A[i] = B[j+1]

 Basically the less-frequent attributes stay true for a stock while the
 daily prices change.

 One example of this is the vlookup function in Excel with the TRUE
 option.

 So we have an implementation of this in R?

 TIA and best,
 -Tir

 __
 R-help@stat.math.ethz.ch 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.



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?

__
R-help@stat.math.ethz.ch 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.


Re: [R] Quick question on merging two time-series of different frequencies

2007-05-10 Thread Achim Zeileis
On Thu, 10 May 2007, Patnaik, Tirthankar  wrote:

 Hi,
   A quick beginner's question. I have two time series, A with
 daily data, and another B with data at varying frequencies, but mostly
 annual. Both the series are sorted ascending.

 I need to merge these two series together in the following way: For any
 entry of A, the lookup should match with B until we find an entry of B
 that's larger than A's.

I'm not sure what exactly you want. I assume that A and B are not the
observations but the corresponding time stamps, right?

In any case, I guess that the zoo package will have some useful
functionality for what you want, e.g., if you have data like
  library(zoo)
  set.seed(123)
  x - zoo(rnorm(11), as.Date(2000-01-01) + 0:10)
  y - zoo(rnorm(4), as.Date(2000-01-01) + c(0, 3, 7, 10))
then you can merge them with
  z - merge(x, y)
and then eliminate NAs, e.g. by
  na.locf(z)
or you could aggregate() the x series so that it becomes a monthly
series or something like that.

See
  vignette(zoo, package = zoo)
for more information.

Best,
Z

 For all A[i], i = 1,...,N and B[j], j=1,...M

 Match with B[j] where A[i] = B[j]

 When A[i]  B[j], match with B[j+1] where A[i] = B[j+1]

 Basically the less-frequent attributes stay true for a stock while the
 daily prices change.

 One example of this is the vlookup function in Excel with the TRUE
 option.

 So we have an implementation of this in R?

 TIA and best,
 -Tir

 __
 R-help@stat.math.ethz.ch 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@stat.math.ethz.ch 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.


Re: [R] Quick question on merging two time-series of different frequencies

2007-05-10 Thread Patnaik, Tirthankar
Achim,
Thanks so much! I should've probably explained what I was trying
to do better (Just an LOCF!). As you've correctly pointed out I'm trying
to merge two time series where the first series is daily (price data),
and the second series is irregular (earnings, balance-sheet data). 

While using an LOCF would certainly solve my problem (In SAS, one used
the DOW (Dorfman-Whitlock) loop for this purpose, but I didn't know it
existed in R), to account for the possibility of a timestamp in the
irregular times series _not_ having an equivalent in the regular series
(wherein the na.locf would introduce an NA in the regular series), I
just inner-join the regular series with the result.

 x - zoo(rnorm(11), as.Date(2000-01-01) + c(1:6,8:10))

Regular series: Doesn't have 7.

 y - zoo(rnorm(4), as.Date(2000-01-01) + c(0, 3, 7, 10))

Irregular series: Has 7.
 
 z - merge(x, y)

Full join between x and y.

 z1 - na.locf(z)

The LOCF. Fills up the regular series too.

 z2 - merge(x,na.locf(merge(x,y))[,2],all=FALSE)

Getting rid of the extraneous observation in x.

Results:

 x
2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07
2000-01-09 
 1.2194692 -0.6081166 -1.1852422  1.0577249  0.3940365 -0.1742952
-0.8321219 
2000-01-10 2000-01-11 
-0.8628410  1.5109680 
 y
 2000-01-01  2000-01-04  2000-01-08  2000-01-11 
-0.03331723  0.04525300 -0.68003282  0.20282930 
 z
x   y
2000-01-01 NA -0.03331723
2000-01-02  1.2194692  NA
2000-01-03 -0.6081166  NA
2000-01-04 -1.1852422  0.04525300
2000-01-05  1.0577249  NA
2000-01-06  0.3940365  NA
2000-01-07 -0.1742952  NA
2000-01-08 NA -0.68003282
2000-01-09 -0.8321219  NA
2000-01-10 -0.8628410  NA
2000-01-11  1.5109680  0.20282930
 z1
x   y
2000-01-02  1.2194692 -0.03331723
2000-01-03 -0.6081166 -0.03331723
2000-01-04 -1.1852422  0.04525300
2000-01-05  1.0577249  0.04525300
2000-01-06  0.3940365  0.04525300
2000-01-07 -0.1742952  0.04525300
2000-01-08 -0.1742952 -0.68003282
2000-01-09 -0.8321219 -0.68003282
2000-01-10 -0.8628410 -0.68003282
2000-01-11  1.5109680  0.20282930
attr(,na.action)
[1] 1
attr(,class)
[1] omit
 z2
x na.locf(merge(x, y))[, 2]
2000-01-02  1.2194692   -0.03331723
2000-01-03 -0.6081166   -0.03331723
2000-01-04 -1.18524220.04525300
2000-01-05  1.05772490.04525300
2000-01-06  0.39403650.04525300
2000-01-07 -0.17429520.04525300
2000-01-09 -0.8321219   -0.68003282
2000-01-10 -0.8628410   -0.68003282
2000-01-11  1.51096800.20282930

Could you also give a quick example of a left- and right join in zoo? I
tried all.x=TRUE, and all.y=FALSE but they don't seem to work.

Best,
-Tir

--
Tirthankar Patnaik
India Strategy
Citigroup Investment Research
+91-22-6631 9887


-Original Message-
From: Achim Zeileis [mailto:[EMAIL PROTECTED] 
Sent: Thursday, May 10, 2007 10:42 PM
To: Patnaik, Tirthankar [GWM-CIR]
Cc: r-help@stat.math.ethz.ch
Subject: Re: [R] Quick question on merging two time-series of different
frequencies

On Thu, 10 May 2007, Patnaik, Tirthankar  wrote:

 Hi,
   A quick beginner's question. I have two time series, A with
daily 
 data, and another B with data at varying frequencies, but mostly 
 annual. Both the series are sorted ascending.

 I need to merge these two series together in the following way: For 
 any entry of A, the lookup should match with B until we find an entry 
 of B that's larger than A's.

I'm not sure what exactly you want. I assume that A and B are not the
observations but the corresponding time stamps, right?

In any case, I guess that the zoo package will have some useful
functionality for what you want, e.g., if you have data like
  library(zoo)
  set.seed(123)
  x - zoo(rnorm(11), as.Date(2000-01-01) + 0:10)
  y - zoo(rnorm(4), as.Date(2000-01-01) + c(0, 3, 7, 10)) then you
can merge them with
  z - merge(x, y)
and then eliminate NAs, e.g. by
  na.locf(z)
or you could aggregate() the x series so that it becomes a monthly
series or something like that.

See
  vignette(zoo, package = zoo)
for more information.

Best,
Z

 For all A[i], i = 1,...,N and B[j], j=1,...M

 Match with B[j] where A[i] = B[j]

 When A[i]  B[j], match with B[j+1] where A[i] = B[j+1]

 Basically the less-frequent attributes stay true for a stock while the

 daily prices change.

 One example of this is the vlookup function in Excel with the TRUE 
 option.

 So we have an implementation of this in R?

 TIA and best,
 -Tir

 __
 R-help@stat.math.ethz.ch 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