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. -------------- next part -------------- A non-text attachment was scrubbed... Name: gridcell2.pdf Type: application/pdf Size: 320961 bytes Desc: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20180515/82d71ed1/attachment.pdf>
How to average values from grid cells with coordinates
3 messages · Jim Lemon, lily li
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 at 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 at 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.
2 days later
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 at 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 at 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 at 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.