[R-sig-Geo] raster to dataframe with xy=TRUE, na.rm=TRUE

Robert J. Hijmans r.hijmans at gmail.com
Sun Aug 31 00:09:14 CEST 2014


Helen,
This is a bug, thanks for reporting it. I have fixed it in
(development) version 2.2-43
Robert

On Fri, Aug 29, 2014 at 8:22 AM, Helen Sofaer <helen at rams.colostate.edu> wrote:
> Thanks Pascal,
> That's helpful.
>
> I am curious about what happened in the second example, if anyone else
> takes a look.
> Cheers,
> Helen
>
>
> On Thu, Aug 28, 2014 at 11:17 PM, Pascal Oettli <kridox at ymail.com> wrote:
>
>> Hello,
>>
>> Did you try with the "rasterToPoints" function?
>>
>> Something like:
>>
>> r1.b.df <- as.data.frame(rasterToPoints(r1.b.mask))
>> coordinates(r1.b.df) <- ~x+y
>> plot(r1.b.df)
>>
>> Regards,
>> Pascal
>>
>> On Fri, Aug 29, 2014 at 1:52 PM, Helen Sofaer <helen at rams.colostate.edu>
>> wrote:
>> > Hi all,
>> >
>> > I’m trying to convert a RasterBrick to a dataframe while adding the
>> > coordinates and while dropping cells that were masked to NA. This
>> > combination of options gives me an error when the mask is done with an sp
>> > object.
>> >
>> >
>> >
>> > Some reproducible code:
>> >
>> >
>> >
>> > usa = getData('GADM', country = 'USA', level = 0)
>> >
>> >
>> >
>> > r1 = raster()
>> >
>> > values(r1) = 1:ncell(r1)
>> >
>> > r1.b = brick(r1, r1, r1, r1)
>> >
>> > r1.b.mask = mask(r1.b, usa)
>> >
>> > plot(r1.b.mask)
>> >
>> > r1.b.df = as.data.frame(r1.b.mask, xy = TRUE, na.rm = TRUE)
>> >
>> >
>> >
>> > The error is:
>> >
>> > Error in data.frame(..., check.names = FALSE) :
>> >
>> >   arguments imply differing number of rows: 64800, 1109
>> >
>> >
>> >
>> > Looks like it wants to combine all the coordinates with just the subset
>> of
>> > the data.
>> >
>> >
>> >
>> > I surprised myself further by looking at what happens if the NAs are in
>> > random locations, rather than masked out:
>> >
>> >
>> >
>> > # random NAs:
>> >
>> > r2 = raster()
>> >
>> > vals = 1:ncell(r2)
>> >
>> > vals[sample(1:ncell(r2), .5*ncell(r2))] = NA
>> >
>> > values(r2) = vals
>> >
>> > plot(r2)
>> >
>> > r2.b = brick(r2, r2, r2, r2)
>> >
>> > r2.b.df = as.data.frame(r2.b, xy = TRUE, na.rm = TRUE)
>> >
>> > str(r2.b.df) # 64800 obs; same as ncell in each layer; further inspection
>> > shows all locations are there and some values are repeated
>> >
>> >
>> >
>> > Any advice/interpretation is appreciated. In practice I have already
>> > cropped but still have a lot of NAs within my extent. Of course, I can
>> drop
>> > the rows afterwards, but thought I’d ask. Also, I see the same thing if
>> > it’s a single layer, rather than a brick.
>> >
>> >
>> >
>> > FYI, I’m running 3.1.1 and raster version 2.2-31 and a Mavericks OSX
>> (and I
>> > also tried it on a Fedora linux machine running 3.1.0 to make sure it
>> > wasn’t a Mavericks thing).
>> >
>> >
>> >
>> > Thanks for your time!
>> >
>> > Helen
>> >
>> > --
>> > Helen Sofaer
>> > Postdoctoral Fellow
>> > Fish Wildlife and Conservation Biology
>> > Colorado State University
>> >
>> >         [[alternative HTML version deleted]]
>> >
>> > _______________________________________________
>> > R-sig-Geo mailing list
>> > R-sig-Geo at r-project.org
>> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>
>>
>> --
>> Pascal Oettli
>> Project Scientist
>> JAMSTEC
>> Yokohama, Japan
>>
>
>
>
> --
> Helen Sofaer
> Postdoctoral Fellow
> Fish Wildlife and Conservation Biology
> Colorado State University
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo



More information about the R-sig-Geo mailing list