zoo objects are intended to represent time series and are
based on vectors and matrices, like ts objects, not data frames.
See ?zoo

Create your new columns as numeric variables:

> library(zoo)
> library(chron) # need chron 2.3-16 for month.day.year
> z <- zoo(matrix(1:24, 6, 4), Sys.Date() + seq(0, length = 6, by = 32)) # test 
> data

> # add year, month and day as columns to z
> with(month.day.year(time(z)), cbind(z, year, month, day, quarter = (month - 
> 1) %/% 3 + 1, dow = as.numeric(format(time(z), "%w"))))
           z.1 z.2 z.3 z.4 year month day quarter dow
2007-12-24   1   7  13  19 2007    12  24       4   1
2008-01-25   2   8  14  20 2008     1  25       1   5
2008-02-26   3   9  15  21 2008     2  26       1   2
2008-03-29   4  10  16  22 2008     3  29       1   6
2008-04-30   5  11  17  23 2008     4  30       2   3
2008-06-01   6  12  18  24 2008     6   1       2   0





On Dec 24, 2007 8:30 AM, Alex Park <[EMAIL PROTECTED]> wrote:
> R
>
> I get a daily feed of data over the internet that I keep in various .csv
> files.
>
> I have built a function that reads that data into R for me:
>
> getMarketData<-function(market)
> {
>        library(zoo)
>        pathname<- "C:/DATA/"
>        files<-c("AN_REV.csv","AX_REV.csv","BN_REV.csv")
>        markets<-c("AUS","DAX","GBP")
>        df<-read.zoo(paste(pathname,files[match(market,markets)],sep=""),
> index.column=1, format="%m/%d/%Y", header=F, sep=",")
>        df
> }
>
> This works fine and returns the dataset as planned:
>
>              V2    V3    V4    V5   V6   V7
> 1990-01-02 54.89 54.99 54.61 54.61  125 2576
> 1990-01-03 54.48 54.62 54.29 54.33 1495 3232
> 1990-01-04 54.67 55.20 54.59 55.08  932 3145
> 1990-01-05 54.64 54.87 54.57 54.57  272 2567
> 1990-01-08 54.87 54.89 54.68 54.79  177 2456
> 1990-01-09 54.87 54.96 54.80 54.88  106 2403
>
> Also if I type the following:
>
> mode(df[1,1])
>
> >"numeric"
>
> That is, my data is treated as numeric (which is as it should be).
>
> Here is where I get a problem. I'd like to add some more columns on to the
> end of the dataset to represent the year, quarter, month, and day.
>
> If I try the following within the function it won't work:
>
> df<-transform(df, "Year"=format(time(df), "%Y"))
>
> Curiously, if I do exactly the same line by line in R (i.e. without
> specifying a function) then it works fine. Is there any reason why I cannot
> use transform in a function?
>
> I also tried a different approach as shown below i.e within my original
> function I added the following lines after I had created df:
>
> df[,8:11]<-0
> df[,7]<-format(time(df), format="%Y")
> df[,8]<-quarters(time(df))
> df[,9]<-months(time(df))
> df[,10]<-weekdays(time(df))
>
> This worked fine however it changed all my data from numeric to character:
>
>           Open  High  Low   Close Volume OI   Year Quarter Month   Day
>
> 1990-01-02 54.89 54.99 54.61 54.61 125    2576 1990 Q1      January Tuesday
>
> 1990-01-03 54.48 54.62 54.29 54.33 1495   3232 1990 Q1      January Wedesday
> 1990-01-04 54.67 55.2  54.59 55.08 932    3145 1990 Q1      January Thursday
>
> 1990-01-05 54.64 54.87 54.57 54.57 272    2567 1990 Q1      January Friday
>
> 1990-01-08 54.87 54.89 54.68 54.79 177    2456 1990 Q1      January Monday
>
> 1990-01-09 54.87 54.96 54.8  54.88 106    2403 1990 Q1      January Tuesday
>
>
> mode(df[1,1])
>
> >"character"
>
> Why does my numeric data get changed into character?
>
> Can anybody see a simple way to add the data I require whilst retaining the
> "numeric" format?
>
> Regards
>
>
> Alex Park
>
> ______________________________________________
> [email protected] 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.
>

______________________________________________
[email protected] 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