[R-sig-Geo] Convert rasters to data frame with time stamp
Dominik Schneider
Dominik.Schneider at colorado.edu
Fri Oct 16 23:56:17 CEST 2015
I don't think I completely understand but can you use tidyr::gather to get
what you want? if you have multiple datasets you could join them all
together at the end.
library(raster)
library(tidyr)
#Create a rasterStack similar to my data - same dimensions and layer names
r <- raster(ncol=60, nrow=60)
s <- stack(lapply(1:408, function(x) setValues(r, runif(ncell(r)))))
names(s) <- paste0('X', seq(as.Date("1980/1/1"), by = "month", length.out =
408))
s
dF=as.data.frame(s)
dF2=gather(dF,date)
On Fri, Oct 16, 2015 at 2:39 PM, Thiago V. dos Santos <
thi_veloso at yahoo.com.br> wrote:
> Dear list,
>
> Generally speaking, I love R. However, one of the things I like least in R
> is the need to interchange between the various data formats required by
> different packages.
>
> I am trying to apply a bias-correction function on some gridded climate
> data. The qmap package has functions to perform bias correction on climate
> data, but the problem I am grasping with is that it requires data to be
> organized as data.frames:
>
>
> library(qmap)
> data(obsprecip)
> data(modprecip)
>
> #Fit a quantile mapping function to observed and modeled data
> qm.fit <- fitQmap(obsprecip,modprecip,
> method="QUANT",qstep=0.01)
>
> #Perform bias correction on modeled data
> qm <- doQmap(modprecip, qm.fit, type="tricub")
>
>
> And that's all. But notice that both observed and modeled data in this
> example are data frames for different locations (Moss, Geiranger and
> Barkestad):
>
> > head(obsprecip)
> MOSS GEIRANGER BARKESTAD
> 1-1-1961 0.1 0 0
> 2-1-1961 0.2 0 0
> 3-1-1961 0.9 0 0
> 4-1-1961 10.6 0 0
> 5-1-1961 1.5 0 0
> 6-1-1961 1.2 0 2
>
> > head(modprecip)
> MOSS GEIRANGER BARKESTAD
> 2-1-1961 2.283 0.0000 3.177000
> 3-1-1961 2.443 10.8600 1.719000
> 4-1-1961 3.099 12.7300 6.636000
> 5-1-1961 0.000 9.7720 9.676000
> 6-1-1961 0.140 0.6448 7.110000
> 7-1-1961 13.470 3.3570 0.001107
>
>
>
> Now, let's back to my problem. I have monthly precip data to which I want
> to apply the same function above, but my data is gridded:
>
> library(raster)
>
> #Create a rasterStack similar to my data - same dimensions and layer names
> r <- raster(ncol=60, nrow=60)
> s <- stack(lapply(1:408, function(x) setValues(r, runif(ncell(r)))))
> names(s) <- paste0('X', seq(as.Date("1980/1/1"), by = "month", length.out
> = 408))
> s
>
>
> Therefore, I need to load data as rasters and iterate through all
> individual gridcells to create a data frame containing:
>
>
> date1, cell1, cell2, cell3, ..., cell3600
> date2, cell1, cell2, cell3, ..., cell3600
> date3, cell1, cell2, cell3, ..., cell3600...
> date408, cell1, cell2, cell3, ..., cell3600
>
> then apply the fit function and finally convert the data back to a raster.
>
>
> Any ideas on how to efficiently convert rasters to data frames containing
> their time stamp and then back to a raster again??
>
> Any hint is much appreciated.
> Greetings,
> -- Thiago V. dos Santos
>
> PhD student
> Land and Atmospheric Science
> University of Minnesota
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list