如何基于播种日期信息对3D降水数据进行子集

时间:2019-03-25 07:23:52

标签: r multidimensional-array subset

我有一个每日降水数据的3维数组[lon,lat,365]和一个3维的播种日期文件[lon,lat,30]。每年在网格上播种一次。我有一个代码(如下所示)提取每个网格单元上的季节总降水量(播种至收获)。

但是,现在我只想提取每个网格单元播种日期后30-60天的降水量值(即,播种= Kharif季节的x,y网格单元上的157天,而305天是狂犬病作物的播种日期) x,y网格单元)。结果将是播种日期后30天[lon,lat,30days]的3维数组。 播种后,即30-60天,80-100天,我需要不同的天数窗口。每个网格单元的播种日期可能不同,因此不同网格单元的播种后30天可能不同,但天数的长度(30-60天)应该相同。

非常感谢您根据播种(日期)和收获(日期)文件选择季节内特定天数的任何帮助,请

我尝试通过“ by”功能从一个377 176 376维的降水中提取出该季节内30天的降水数据。对于每个网格单元,播种和收获日期都不同,我尝试在播种后30天提取总降水量数据。我使用SDATE [dim(sdate)= 377 176 30]文件作为索引,但出现错误: [1] 1982 tapply(seq_len(22L),list(sdate[year] = 305L),函数(x)中的错误:   参数必须具有相同的长度 另外:警告消息: 在sdate [year-1]:c(326:340)中:   数值表达式包含15个元素:仅第一个使用

#沉淀     prec <-array(0,dim = nyear)

for (year in c(2:30)) #first year not, because growing season might have started in year 0
{
  print(year+1980)
  inputprec.file<-paste("E:/Paper_2018/Prec/","prec_",1980+year,".nc",sep="")
  inputprec.file.previous<-paste("E:/Paper_2018/Prec/","prec_",1980+year-1,".nc",sep="")

  nc<-nc_open(inputprec.file)
  lons<-ncvar_get(nc,"longitude")
  lats<-ncvar_get(nc,"latitude")
  val<-ncvar_get(nc,"pr")
  nc_close(nc)

  x<-which(abs(lons-lon)<0.01)
  y<-which(abs(lats-lat)<0.01)
  #for kharif season harvest date (260) is > sowing (157)

  if(hdate[year]>sdate[year])
  {
    prec[year]<-sum(val[x,y,sdate[year]:hdate[year]]) # season total     
    }else

  {
#for Rabi sowing start in November and harvets occurs in March-April  next year
    prec[year]<-sum(val[x,y,1:hdate[year]]) # code to extract winter season total precipitation from sdate: hdate spans over two years (1982-1983)
    # nc<-nc_open(inputprec.file.previous)
    # val<-ncvar_get(nc,"pr")
    # nc_close(nc)
    prec[year]<-prec[year]+sum(val[x,y,sdate[year-1]:365])

  }
}

0 个答案:

没有答案