[R] How to average values from grid cells with coordinates

lily li choco|d12 @end|ng |rom gm@||@com
Fri May 18 20:05:58 CEST 2018


Hi Jim,

Thanks. Yes, the two assumptions are correct, and they reflect the
datasets. I have an uncertainty about the code below. Why do you use
abs(blackcells[[i]]$lat - redcell$lat) <1 rather than a different number
than 1? Second, why to construct blackcells as a list, rather than a
dataframe. Because in a dataframe, each row can represent one grid cell,
while the three columns can represent the lati, lon, and pop. Thanks again
for your help.

for(i in 1:121) {
if(abs(blackcells[[i]]$lat-redcell$lat) < 1 &&
abs(blackcells[[i]]$lon-redcell$lon) < 1) {
close4[closen]<-i
closen<-closen+1
}
}


On Wed, May 16, 2018 at 2:45 AM, Jim Lemon <drjimlemon using gmail.com> wrote:

> Hi lily,
> There are one or two assumptions to be made here. First is that the
> latitude and longitude values of the "black" cells are equally spaced
> as in your illustration. Second, that all latitude and longitude
> values for the "red" cells fall at the corners of four "black" cells.
>
> You can get the four "black" cells by finding the lat/lon values that
> are closest to the "red" lat/lon values. Here's a basic example:
>
> lat<-rep(28:38,11)
> lon<-rep(98:108,each=11)
> pop<-sample(80:200,121)
> blackcells<-list()
> for(i in 1:121) blackcells[[i]]<-list(lat=lat[i],lon=lon[i],pop=pop[i])
> redcell<-list(lat=33.5,lon=100.5,pop=NA)
> close4<-rep(NA,4)
> closen<-1
> for(i in 1:121) {
>  if(abs(blackcells[[i]]$lat-redcell$lat) < 1 &&
>   abs(blackcells[[i]]$lon-redcell$lon) < 1) {
>   close4[closen]<-i
>   closen<-closen+1
>  }
> }
> cat(close4,"\n")
> redcell$pop<-(blackcells[[close4[1]]]$pop +
>  blackcells[[close4[2]]]$pop + blackcells[[close4[3]]]$pop +
>  blackcells[[close4[4]]]$pop)/4
> print(blackcells[[close4[1]]])
> print(blackcells[[close4[2]]])
> print(blackcells[[close4[3]]])
> print(blackcells[[close4[4]]])
> print(redcell)
>
> As you can see, this has picked out the four "black" cells closest to
> the "red" cell's coordinates and calculated the mean.
>
> Jim
>
> On Wed, May 16, 2018 at 2:23 PM, lily li <chocold12 using gmail.com> wrote:
> > Hi R users,
> >
> > I have a question about data processing. I have such a dataset, while
> each
> > black grid cell has a few attributes and the corresponding attribute
> > values. The latitude and longitude of the center of each grid cell are
> > given also.
> >
> > Then I want to average the attribute values from four adjacent grid cells
> > to get the average value for the center of each red grid cell. Thus,
> there
> > are the same number of attributes, but different values. The red grid
> cells
> > do not overlap. I was thinking to write such a script that can ID each
> > black grid cell, for example, 1, 2, 3, 4, ..., then the corresponding
> four
> > grid cells will be used to average for the red grid cell. But I just have
> > the latitude and longitude, attribute values for the black cells, and
> also
> > latitude and longitude for the red cells, how to write such a script in
> R.
> > Could anyone give me suggestion about the work flow? Thanks very much.
> >
> > I attached the picture of the grid cells here.
> >
> > ______________________________________________
> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> > 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.
> >
>

	[[alternative HTML version deleted]]




More information about the R-help mailing list