[R] better code?
Spencer Graves
spencer.graves at pdf.com
Mon Jun 27 00:51:14 CEST 2005
OK. How about the following:
R> x1.df$d. <- as.Date(as.character(x1.df$d), format="%m/%d/%Y")
R> sapply(x1.df, class)
d x y d.
"factor" "numeric" "numeric" "Date"
R>
R> (byLH <- by(x1.df[2:3], x1.df$d., var))
x1.df$d.: 2005-01-01
x y
x 1.272688 -0.783719
y -0.783719 0.884866
------------------------------------------------------------
x1.df$d.: 2005-01-08
x y
x 1.4893139 0.2845754
y 0.2845754 0.6273839
------------------------------------------------------------
x1.df$d.: 2005-01-15
x y
x 0.9992097 0.8719848
y 0.8719848 0.7753879
------------------------------------------------------------
x1.df$d.: 2005-01-22
x y
x 1.2269211 -0.8694323
y -0.8694323 0.6161053
------------------------------------------------------------
x1.df$d.: 2005-01-29
x y
x 0.072721473 0.006551483
y 0.006551483 1.003923812
spencer graves
##########################################
Hi again!
The solution is good except that the dates are in alpha and not date order.
But this is way better.
Thanks
############################
Hi, Laura:
How about the following:
> sapply(x1.df, class)
d x y
"factor" "numeric" "numeric"
> (byLH <- by(x1.df[-1], x1.df$d, var))
x1.df$d: 1/1/2005
x y
x 1.272688 -0.783719
y -0.783719 0.884866
-------------------------------------------------------------
x1.df$d: 1/15/2005
x y
x 0.9992097 0.8719848
y 0.8719848 0.7753879
-------------------------------------------------------------
x1.df$d: 1/22/2005
x y
x 1.2269211 -0.8694323
y -0.8694323 0.6161053
-------------------------------------------------------------
x1.df$d: 1/29/2005
x y
x 0.072721473 0.006551483
y 0.006551483 1.003923812
-------------------------------------------------------------
x1.df$d: 1/8/2005
x y
x 1.4893139 0.2845754
y 0.2845754 0.6273839
spencer graves
Laura Holt wrote:
> Hi R!
>
> I have a data.frame with dates in the first column and numeric values in
> columns 2 -3.
>
> I want to have a covariance matrix for each date. The following code
> works fine:
>
>> x1.df
>
> d x y
> 1 01/01/05 1.06014788 0.72595670
> 2 01/01/05 -1.56330741 2.44930531
> 3 01/01/05 -0.58001696 0.48626682
> 4 01/01/05 0.27653308 0.52676239
> 5 01/08/05 1.91849382 1.72136239
> 6 01/08/05 -0.74774661 0.16657346
> 7 01/08/05 0.18505727 1.33570129
> 8 01/08/05 1.47015895 1.59666054
> 9 01/08/05 -0.67119562 2.31980255
> 10 01/15/05 0.39728456 2.48849586
> 11 01/15/05 -0.96484152 1.47565372
> 12 01/15/05 -1.55109398 0.73436620
> 13 01/22/05 -1.36172373 1.12015635
> 14 01/22/05 0.20475072 0.01010656
> 15 01/29/05 -0.49909855 0.15583279
> 16 01/29/05 -0.07834782 0.99454434
> 17 01/29/05 0.12845272 0.09605443
> 18 01/29/05 -0.44926053 1.48959860
> 19 01/29/05 -0.07033900 2.50253296
>
>> for(i in 1:5) {
>
> + yy <- x1.df$d == u3[i]
> + zz <- cov(x1.df[yy,2:3])
> + print(dates(u3[i]))
> + prmatrix(zz)
> + }
> [1] 01/01/05
> x y
> x 1.272688 -0.783719
> y -0.783719 0.884866
> [1] 01/08/05
> x y
> x 1.4893139 0.2845754
> y 0.2845754 0.6273839
> [1] 01/15/05
> x y
> x 0.9992097 0.8719848
> y 0.8719848 0.7753879
> [1] 01/22/05
> x y
> x 1.2269211 -0.8694323
> y -0.8694323 0.6161053
> [1] 01/29/05
> x y
> x 0.072721473 0.006551485
> y 0.006551485 1.003923812
>
>>
> However, I'm sure that there is a MUCH better way to accomplish this task.
>
> Any suggestions, please?
>
> R V 2.1.0 Windows
>
> Thank you in advance!
> Sincerely,
> Laura Holt
> mailto: lauraholt_983 at hotmail.com
>
> _________________________________________________________________
> On the road to retirement? Check out MSN Life Events for advice on how
> to get there! http://lifeevents.msn.com/category.aspx?cid=Retirement
>
--
Spencer Graves, PhD
Senior Development Engineer
PDF Solutions, Inc.
333 West San Carlos Street Suite 700
San Jose, CA 95110, USA
spencer.graves at pdf.com
www.pdf.com <http://www.pdf.com>
Tel: 408-938-4420
Fax: 408-280-7915
More information about the R-help
mailing list