[R] How to create gridded data

MacQueen, Don
Wed, 14 Nov 2018 16:48:55 -0000

Sarah's answer is probably the best approach, but to do it using very basic
R methods that predate the very good spatial support that R now has, I would
likely do this:

## Thanks, Jim Lemon, for this step:
df1 <- read.table(text"latitude   longitude   Precip
45.5           110.5         3.2
45.5           111            5.0
45.5           111.5         1.8
45.5           112            2.0
46              110.5         6.1
46              111            4.5
46              111.5         7.8
46              112            5.5",
header=TRUE)

## first sort
df1 <- df1[order(df1$latitude, df1$longitude) , ]

## convert vector of precipitations to matrix
df2 <- matrix(df1$Precip, nrow=length(unique(df1$latitude)), byrow=TRUE)

## reorder the latitudes (rows)
df2 <- df2[ nrow(df2):1 , ]

## > df2
##      [,1] [,2] [,3] [,4]
## [1,]  6.1  4.5  7.8  5.5
## [2,]  3.2  5.0  1.8  2.0

## From the original question:
## DF2
## 6.1   4.5   7.8   5.5
## 3.2   5.0   1.8   2.0
## ...

--
Don MacQueen
Lawrence Livermore National Laboratory
7000 East Ave., L-627
Livermore, CA 94550
925-423-1062
Lab cell 925-724-7509



?On 11/13/18, 8:50 PM, "R-help on behalf of lily li"
<r-help-bounces at r-project.org on behalf of chocold12 at gmail.com>
wrote:

    Thanks, Sarah's answer helps the question. Now how to change the gridded
    data back to DF1 format? I don't know how to name the format, thanks.

    On Tue, Nov 13, 2018 at 10:56 PM David L Carlson <dcarlson at
tamu.edu> wrote:

    > Sarah's answer is probably better depending on what you want to do
with
    > the resulting data, but here's a way to go from your original DF1
to DF2:
    >
    > > DF1 <- structure(list(latitude = c(45.5, 45.5, 45.5, 45.5, 46,
46, 46,
    > +         46), longitude = c(110.5, 111, 111.5, 112, 110.5, 111, 111.5,
    > +         112), Precip = c(3.2, 5, 1.8, 2, 6.1, 4.5, 7.8, 5.5)),
    > +         class = "data.frame", row.names = c(NA, -8L))
    > >
    > # Convert to table with xtabs()
    > > DF2 <- xtabs(Precip~latitude+longitude, DF1)
    > >
    >
    > # Reverse the order of the latitudes
    > > DF2 <- DF2[rev(rownames(DF2)), ]
    > > DF2
    >         longitude
    > latitude 110.5 111 111.5 112
    >     46     6.1 4.5   7.8 5.5
    >     45.5   3.2 5.0   1.8 2.0
    >
    > # Convert to a data frame
    > > DF2 <- as.data.frame.matrix(DF2)
    > > DF2
    >      110.5 111 111.5 112
    > 46     6.1 4.5   7.8 5.5
    > 45.5   3.2 5.0   1.8 2.0
    >
    > ----------------------------------------
    > David L Carlson
    > Department of Anthropology
    > Texas A&M University
    > College Station, TX 77843-4352
    >
    >
    > -----Original Message-----
    > From: R-help <r-help-bounces at r-project.org> On Behalf Of Sarah
Goslee
    > Sent: Tuesday, November 13, 2018 8:16 AM
    > To: lily li <chocold12 at gmail.com>
    > Cc: r-help <r-help at r-project.org>
    > Subject: Re: [R] How to create gridded data
    >
    > If you want an actual spatial dataset, the best place to ask is
R-sig-geo
    >
    > R has substantial capabilities for dealing with gridded spatial data,
    > including in the sp, raster, and sf packages.
    >
    > Here's one approach, creating a SpatialGridDataFrame, which can be
    > exported in any standard raster format using the rgdal package.
    >
    > DF2 <- DF1
    > coordinates(DF2) <- ~longitude + latitude
    > gridded(DF2) <- TRUE
    > fullgrid(DF2) <- TRUE
    >
    > I recommend Roger Bivand's excellent book:
    > https://www.springer.com/us/book/9781461476177
    >
    > and there are abundant web tutorials.
    >
    > Sarah
    > On Tue, Nov 13, 2018 at 2:22 AM lily li <chocold12 at gmail.com>
wrote:
    > >
    > > Hi R users,
    > >
    > > I have a question about manipulating data. For example, I have DF1
as the
    > > following, how to transform it to a gridded dataset DF2? In DF2,
each
    > value
    > > Precip is an attribute of the corresponding grid cell. So DF2 is
like a
    > > spatial surface, and can be imported to ArcGIS. Thanks for your
help.
    > >
    > > DF1
    > > latitude   longitude   Precip
    > > 45.5           110.5         3.2
    > > 45.5           111            5.0
    > > 45.5           111.5         1.8
    > > 45.5           112            2.0
    > > 46              110.5         6.1
    > > 46              111            4.5
    > > 46              111.5         7.8
    > > 46              112            5.5
    > > ...
    > >
    > >
    > > DF2
    > > 6.1   4.5   7.8   5.5
    > > 3.2   5.0   1.8   2.0
    > > ...
    > >
    >
    >
    > --
    > Sarah Goslee (she/her)
    > http://www.numberwright.com
    >
    > ______________________________________________
    > 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.
    >

    	[[alternative HTML version deleted]]

    ______________________________________________
    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.