Chris, That worked exceptionally well. Here's the pseudo-code for what I ended up using:
library(spatstat) depth_bin<-depth<-stage-elevation #depth at grid cells = stage matrix - elevation matrix; initialize binary matrix depth_bin[,]<-depth>5 #binary matrix of cells >5cm deep depth_con_im<-connected(as.im(depth_bin),background=0) #8-connected regions of pixel image depth_con<-depth_con_im$v #v element is data matrix class(depth_con)<-"matrix" for (i in 1:length(coords$points)) { #points of interest x_co<-which.min(abs(x-coords$EASTING[i])) y_co<-which.min(abs(y-coords$NORTHING[i])) pond[i]<-depth_con[x_co,y_co] #pond of cell of interest area[i]<-length(which(depth_con==pond[i]))*400*400 #area of the pond (400m grid) depth[i]<-depth[x_co,y_co] #depth at cell of interest } Thanks for the tip! -bryan ------ Bryan McCloskey, Ph.D. IT Specialist (Data Management/Internet) U.S. Geological Survey St. Petersburg Coastal & Marine Science Center 600 Fourth St. South St. Petersburg, FL 33701 South Florida Information Access: http://sofia.usgs.gov Everglades Depth Estimation Network: http://sofia.usgs.gov/eden Phone: 727.803.8747x3017 * Fax: 727.803.2032 ------ On Feb 1, 2012, at 9:34 AM, Chris Campbell wrote: > Dear Bryan, > > You could try using spatial techniques to choose the contiguous areas of your > matrices. > > > require(spatstat) > > set.seed(1520) > > x <- matrix(rnorm(25), nrow=5, ncol=5, > + dimnames=list(c("A","B","C","D","E"), c("v","w","x","y","z"))) > > x > v w x y z > A 0.3089046 -0.003350135 -0.4506777 0.7971787 -1.95078919 > B -1.5895009 0.336233539 -0.3237293 0.7676754 -0.76756928 > C -1.0324022 -1.119037223 -1.1525350 0.6057773 -0.28930702 > D -0.8440912 -0.499994418 0.7664473 0.6367184 -0.09801227 > E 0.6261038 0.391232210 0.4967601 1.0753439 -0.50998559 > > z <- y <- x > > > > y[, ] <- x < 0.6 > > y > v w x y z > A 1 1 1 0 1 > B 1 1 1 0 1 > C 1 1 1 0 1 > D 1 1 0 0 1 > E 0 1 1 0 1 > > yi <- as.im(y) > > ycOut <- connected(yi, background = 0) > > yc <- ycOut$v > > yc > [,1] [,2] [,3] [,4] [,5] > [1,] 1 1 1 <NA> 2 > [2,] 1 1 1 <NA> 2 > [3,] 1 1 1 <NA> 2 > [4,] 1 1 <NA> <NA> 2 > [5,] <NA> 1 1 <NA> 2 > Levels: 1 2 > > > > z[yc != 1 | is.na(yc)] <- NA > > z > v w x y z > A 0.3089046 -0.003350135 -0.4506777 NA NA > B -1.5895009 0.336233539 -0.3237293 NA NA > C -1.0324022 -1.119037223 -1.1525350 NA NA > D -0.8440912 -0.499994418 NA NA NA > E NA 0.391232210 0.4967601 NA NA > > Hope this helps. > > Best wishes, > > Chris Campbell > MANGO SOLUTIONS > Data Analysis that Delivers > +44 1249 767700 > > > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of Bryan McCloskey > Sent: 31 January 2012 19:58 > To: r-help@r-project.org > Subject: [R] Selecting contiguous, irregularly-shaped sets of values from > arrays > > All, > > I am attempting to select all of the contiguous elements of a matrix that > meet some criterion. I.e., values that would be contained within an irregular > area defined by a "contour" applied around point of interest. So, if I have a > matrix x as follows: > > > x <- matrix(rnorm(25), nrow=5, ncol=5, > dimnames=list(c("A","B","C","D","E"), c("v","w","x","y","z")) > > x > v w x y z > A 0.5184795 1.9641285 0.8632044 1.5010397 0.8468490 B -1.2402866 > 0.5211307 -0.1474351 1.3264893 0.1087390 C 0.5910275 -1.1708906 0.9440755 > 1.0970971 -0.2784806 D 0.6377495 1.1594035 -0.4217621 1.4021680 -0.6487677 > E -1.4590833 0.2065765 0.1623669 1.3598283 0.3742821 > > > > how can I select all values in the "pond" of contiguous matrix entries that > have values, say <0.6, if my entry of interest is x["A","v"]. In that case, I > would like to select the following starred entries: > > v w x y z > A 0.5184795* 1.9641285 0.8632044 1.5010397 0.8468490 B -1.2402866* > 0.5211307* -0.1474351* 1.3264893 0.1087390 C 0.5910275* -1.1708906* > 0.9440755 1.0970971 -0.2784806 D 0.6377495 1.1594035 -0.4217621* 1.4021680 > -0.6487677 E -1.4590833 0.2065765* 0.1623669* 1.3598283 0.3742821 > > But I would _not_ like to select any of the values in x[,"z"], because, even > though they may be <0.6, they are not contiguous with the pond that > x["A","v"] is in. > > Is there an easy way to do this for many points of interest in a large matrix? > > Thanks, > -bryan > > ------ > Bryan McCloskey, Ph.D. > U.S. Geological Survey > St. Petersburg Coastal & Marine Science Center St. Petersburg > ------ > > ______________________________________________ > 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. > > LEGAL NOTICE > This message is intended for the use of the named recipient(s) only and may > contain confidential and / or privileged information. If you are not the > intended recipient, please contact the sender and delete this message. Any > unauthorised use of the information contained in this message is prohibited. > > Mango Business Solutions Limited is registered in England under No. 4560258 > with its registered office at Suite 3, Middlesex House, Rutherford Close, > Stevenage, Herts, SG1 2EF, UK. > > PLEASE CONSIDER THE ENVIRONMENT BEFORE PRINTING THIS EMAIL > > ______________________________________________ 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.