Katrina, What I have done, if I understand what you are after, was to create a list for each month of data - in order. Then, create a boxplot - in order - by month/year. I do this for our ensemble streamflow forecasts. The key us to create the list of values by month.
Regards, Tom Sent from my iPhone On Feb 16, 2011, at 3:31 PM, Katrina Bennett <kebenn...@alaska.edu> wrote: > Hello, I'm trying to develop a box plot of time series data to look at the > range in the data values over the entire period of record. > > My data initially starts out as a list of hourly data, and then I've been > using this code to make this data into the final ts array. > > # Read in the station list > stn.list <- read.csv("/home/kbennett/fews/stnlist3", as.is=T, header=F) > > # Read in all three variables. > vars <- c("MAT", "MAP", "MAP06") > > for (stn in stn.list) { > for (v in 1:length(vars) { > # Read in year month start and end dates table & name it > ym.table <- read.csv("/home/kbennett/fews/", stn, var, ".ym.txt", as.is=T, > header=F) > names(ym.table) <- c("yearstart", "monthstart", "yearend", "monthend") > > fn <- paste(stn, ".", vars[v], ".FIN", sep="") > if(file.exists(fn)) { > clim.dat <- read.csv(fn, header=F) > names(clim.dat) <- c("cdata") > year.start <- ym.table$yearstart > year.end <- ym.table$yearend > > mo.start <- ym.table$monthstart > mo.end <- ym.table$monthend > > regts.start = ISOdatetime(year.start, mo.start, 1, hour=0, min=0, > sec=0, tz="GMT") > regts.end = ISOdatetime(year.end, mo.end, 1, hour=18, min=0, sec=0, > tz="GMT") > > zts <- zooreg(clim.dat$cdata, start = regts.start, end = regts.end, > frequency = 4, deltat = 21600) > > #Create a daily average from the timeseries > zta <- aggregate(zts, as.POSIXct(cut(time(zts), "24 hours", > include=T)), mean) > > #Select hourly data from the timeseries based on a specific time > zt.hr <- aggregate(zts, as.Date, head, 4) > zt.hr.ym <- aggregate(zt.hr, as.yearmon, head, 4) > zt.hr.1 <- zt.hr.ym[,1] > zt.hr.2 <- zt.hr.ym[,2] > zt.hr.3 <- zt.hr.ym[,3] > zt.hr.4 <- zt.hr.ym[,4] > > zt.hr.1a <- aggregate(zt.hr.1, as.yearmon) > min.y <- min(zt.hr) > max.y <- max(zt.hr) > > frequency(zt.hr.1) <- 12 > zt.1.mo <- as.ts(zt.hr.1) > > #Monthly boxplots of daily averages, for the months > boxplot(zt.1.mo ~ month, ##THIS IS WHAT DOESN'T > WORK HERE > boxwex=0.25, at=(1:12)-0.2, > outline = F, > col = "gray", > xlab = "Month", > ylab = expression(paste("( ",T^o,"C )") ), > ylim = c(min.y-5,max.y+5), > yaxs = "i", > xaxt = "n", > main = vars) > axis(1, at=c(1:12), labels=month.abb, cex.axis = 0.65) > legend("topright", c("Hour 00"), fill = c("gray")) > } > > > > #write the results to a csv file > write.csv(cdat, paste(stn, "_", vars[v], ".csv", sep=""), > row.names=T, col.names=T) > > } > } > > > The final array looks like this: > > Jan Feb Mar Apr May Jun Jul Aug Sep > Oct Nov Dec > 1948 28.719 4.977 39.037 9.746 8.348 36.672 47.660 54.076 38.062 34.486 > 11.938 39.666 > 1949 11.698 -6.675 16.844 0.950 10.349 38.752 39.785 40.544 57.603 35.476 > 2.308 -7.960 > 1950 0.340 45.206 6.385 17.132 19.074 38.465 48.711 54.686 48.743 33.978 > 23.090 10.007 > 1951 12.398 31.304 47.182 4.539 23.223 45.668 50.516 53.239 59.402 28.081 > 16.427 14.839 > 1952 -7.693 30.561 33.478 14.799 12.750 35.359 43.180 57.840 44.593 43.768 > 8.574 14.587 > 1953 -9.875 38.726 26.393 12.881 19.228 48.833 49.903 56.224 48.829 23.783 > 19.308 14.292 > 1954 35.943 16.706 16.021 7.806 23.593 40.418 45.310 53.113 49.203 29.480 > 17.228 33.068 > 1955 23.363 15.706 14.100 17.271 19.258 36.969 47.301 51.826 40.446 35.201 > 16.463 11.132 > 1956 45.868 -8.504 48.167 10.746 25.024 36.247 47.741 52.160 41.781 29.115 > 25.414 21.954 > > > > My main problem is that I can't access the rows (i.e. months) to subset the > data by. > > Could someone point out how I am able to get at the months in this array and > subset them for plotting using the boxplot function? > > > Thank you, > > Katrina > > -- > Katrina E. Bennett > PhD Student > University of Alaska Fairbanks > International Arctic Research Center > 930 Koyukuk Drive, PO Box 757340 > Fairbanks, Alaska 99775-7340 > 907-474-1939 office > 907-385-7657 cell > kebenn...@alaska.edu > > > Personal Address: > UAF, PO Box 752525 > Fairbanks, Alaska 99775-2525 > bennett.katr...@gmail.com > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org 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@r-project.org 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.