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.