【问题标题】:Convert natural year to hydrological year time series Rasterbrick R将自然年转换为水文年时间序列 Rasterbrick R
【发布时间】:2017-08-03 00:17:35
【问题描述】:

给定一个带有自然年份的rasterbrick (Jan-Dec),如何将其转换为具有水文年份(从1st October and ending on the following 30th September 开始)?与here 的问题类似(但不准确)。

样本数据:

     nl <- 768
     s <- brick(nrows = 510,  ncols = 1068,
                   xmn = -180, xmx = 180, ymn = -90, ymx = 90,
                   crs = "+proj=longlat +datum=WGS84",
                   nl = nl,values=TRUE)
        dates <- seq(as.Date("1950-01-01"), as.Date("2013-12-31"), by = "month")
        s <- setZ(s, dates)
vals <- 1:ncell(s)
s[]=vals

【问题讨论】:

    标签: r maps time-series raster


    【解决方案1】:

    我刚才wrote a function这个。

    to_wateryear <- function(thedate){
      thedate = as.Date(thedate)
      year = as.integer(substr(thedate, 1, 4))
      cutoff =  cutoff = as.Date(paste(year, '-10-01', sep=''))
      return(ifelse(thedate < cutoff, 
               year*1000 + thedate - as.Date(paste(year - 1, '-09-30', sep='')),
               (year + 1)*1000 + thedate - as.Date(paste(year, '-09-30', sep=''))))
    }
    

    例子:

    to_wateryear(as.Date(Sys.time()))
    to_wateryear('2013-10-01')
    # leap year behavior
    to_wateryear('2012-09-30')
    to_wateryear('2013-09-30')
    to_wateryear('2012-02-29')
    to_wateryear('2013-03-31')
    

    编辑从您的 cmets 看来,您真正想要的是按水年拆分您的栅格砖,而不是根据水文年来表示日期。

    library(raster)
    nl <- 768
    s <- brick(nrows = 510,  ncols = 1068, 
      xmn = -180, xmx = 180, ymn = -90, ymx = 90,
      crs = "+proj=longlat +datum=WGS84",
      nl = nl,values=TRUE)
    
    dates <- seq(as.Date("1950-01-01"), as.Date("2013-12-31"), by = "month")
    # use water year
    s <- setZ(s, to_wateryear(dates))
    vals <- 1:ncell(s)
    s[]=vals
    
    # split by water year
    hyears = unique(getZ(s) %/% 1000)
    res = vector("list", length(hyears))
    for(i in 1:length(hyears))
      res[[i]] = s[[which(getZ(s) %/% 1000 == hyears[i])]]
    names(res) = paste0("HY", hyears)
    

    【讨论】:

    • 这可能很有帮助。你能在我的rasterbrick,s 上测试一下吗?
    • 我确实提供了上面的示例数据。当我到达我的电脑时,我会试试看。但是,请尝试让我知道它是否适合您。谢谢。
    • 我尝试了以下但得到的是数字而不是日期:s &lt;- setZ(s, to_wateryear(dates))
    • 是的...你想如何代表水年的日期?也许您应该添加一个您期望的输出示例。
    • 类似这样的东西,但在光栅砖上https://gist.github.com/cvitolo/e2ec4887f376e3b7d912
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2021-07-31
    • 2018-12-24
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多