[R] getting data associated with coordinates in a spatial data frame

Bailey, Daniel bailed at spu.edu
Thu Oct 13 20:44:27 CEST 2011


Michael, that's half of the problem solved (whew!!). Now how do I change the data at that location?

This is not an intuitive way to manipulate data.

-----Original Message-----
From: R. Michael Weylandt [mailto:michael.weylandt at gmail.com] 
Sent: Thursday, October 13, 2011 11:35 AM
To: Bailey, Daniel
Cc: Sarah Goslee; r-help at r-project.org
Subject: Re: [R] getting data associated with coordinates in a spatial data frame

Ah yes, my eternal nemesis the S4 class...

You were basically there with

e[e$coordinates==(0,17),]

but for some access stuff that comes from the SpatialDataPointsFrame class.

You'll probably want to do this in two steps:

coords = coordinates(e)
## Use the access function coordinates to get a 2xn matrix of coordinates x and y; ## you could also do this with coords = e at coords as Weidong noted but it's discouraged

e[coords[,"x"] == my.x & coords[,"y"] == my.y, "leachate"]

I can't test it on your data, but I think this will do it.

data(meuse.grid)
coordinates(meuse.grid) <- ~x+y
M = meuse.grid

coords = coordinates(M)
 M[(coords[,"x"] == 179220) & (coords[,"y"] == 329620), "soil"]

Hope this helps,

Michael


On Thu, Oct 13, 2011 at 2:18 PM, Bailey, Daniel <bailed at spu.edu> wrote:
> Michael,
> Thank you for the tips. The suggestion didn't work though. Here is the output of str(e):
> Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
>  ..@ data       :'data.frame': 168 obs. of  2 variables:
>  .. ..$ catchcandata: num [1:168] 47.2 50.4 53.7 58 69.8 ...
>  .. ..$ section     : Factor w/ 1 level "16 Sept F9": 1 NA NA NA NA NA NA NA NA NA ...
>  ..@ coords.nrs : int [1:2] 1 2
>  ..@ coords     : num [1:168, 1:2] 0 0 0 0 0 ...
>  .. ..- attr(*, "dimnames")=List of 2
>  .. .. ..$ : NULL
>  .. .. ..$ : chr [1:2] "x" "y"
>  ..@ bbox       : num [1:2, 1:2] 0 0 48.8 17.1
>  .. ..- attr(*, "dimnames")=List of 2
>  .. .. ..$ : chr [1:2] "x" "y"
>  .. .. ..$ : chr [1:2] "min" "max"
>  ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
>  .. .. ..@ projargs: chr NA
>
> -----Original Message-----
> From: R. Michael Weylandt [mailto:michael.weylandt at gmail.com]
> Sent: Thursday, October 13, 2011 11:13 AM
> To: Bailey, Daniel
> Cc: Sarah Goslee; r-help at r-project.org
> Subject: Re: [R] getting data associated with coordinates in a spatial 
> data frame
>
> It's going to depend how the coordinates are stored within the data frame. Do you perhaps know if they are factors or character strings?
> (I'm not familiar with the package). If you don't know, type
> str(NAMEOFYOUROBJECT) and we can help interpret the output.
>
> Untested, I think this would actually work for both though:
> e[as.character(e$coordinates)=="(0,17)",]
>
> Michael
>
> On Thu, Oct 13, 2011 at 2:05 PM, Bailey, Daniel <bailed at spu.edu> wrote:
>> Thank you Sarah. I tried your suggestion, and if I coerce it into a normal data.frame, that method works. But if you've already made the data into a SpatialPixelsDataFrame and run coordinates (both from the package "sp") so that the columns "x" and "y" become a single column "coordinates" with the format (0, 17) for x and y, how do you then call or manipulate data at a specific location?
>>
>> The following:
>> e[e$coordinates==(0,17),]
>> Doesn't work.
>>
>>
>> -----Original Message-----
>> From: Sarah Goslee [mailto:sarah.goslee at gmail.com]
>> Sent: Wednesday, October 12, 2011 5:34 PM
>> To: Bailey, Daniel
>> Cc: r-help at r-project.org
>> Subject: Re: [R] getting data associated with coordinates in a 
>> spatial data frame
>>
>> Hi,
>>
>> On Wed, Oct 12, 2011 at 3:37 PM, Bailey, Daniel <bailed at spu.edu> wrote:
>>> If I know the specific coordinate in a spatial data frame, how can I access the data at that coordinate?
>>>
>>> My coordinates are labeled "x" and "y" in a data.frame "e". The data is in column "leachate".
>>> I want to say, basically:
>>> e$leachate at coordinates(2,3<mailto:e$leachate at coordinates(2,3>).
>>
>> That's kind of mangled, but what about:
>>
>> e[e$x == my.x & e$y == my.y, "leachate"]
>>
>> (Depending on the form of your coordinates, you may also have to 
>> invoke FAQ 7.31.)
>>
>> Sarah
>>
>>> Thanks, Daniel
>>>
>>
>> --
>> Sarah Goslee
>> http://www.functionaldiversity.org
>>
>> ______________________________________________
>> R-help at 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.
>>
>
>



More information about the R-help mailing list