как установить трехмерные данные об осадках на основе информации о дате посева - PullRequest
0 голосов
/ 25 марта 2019

У меня есть 3-мерный массив данных о суточных осадках [lon, lat, 365] и 3-мерный файл с датой посева [lon, lat, 30]. Один посев на каждый год в ячейке сетки. У меня есть код (приведенный ниже), чтобы извлечь общее количество осадков за сезон (посев для сбора урожая) в каждой ячейке сетки.

НО, теперь я хочу извлечь значения осадков только с 30-60-го дня после даты посева на каждую ячейку сетки (т.е. посев = день 157 по x, у ячейки сетки по сезону Харифа, а день 305 - это дата посева по раби на х, у ячейка сетки). Результатом будет 3-мерный массив через 30 дней после даты посева [долгота, широта, 30 дней]. Мне нужны разные окна дней после посева, т.е. день 30-60, 80-100. Дата посева может быть разной в каждой ячейке сетки, поэтому день 30 после посева может быть разным в разных ячейках сетки, но продолжительность дней (день 30-60) должна быть одинаковой. Любая помощь в выборе определенной продолжительности дня в течение сезона на основе файлов посева (sdate) и урожая (hdate), пожалуйста, оцените

Я попытался использовать функцию «по» для извлечения данных об осадках за 30 дней в течение сезона из массива осадков с 377 176 376 измерениями. для каждой ячейки сетки даты посева и сбора урожая разные, и я попытался извлечь данные об общем количестве осадков за 30 дней после посева. Я использовал SDATE [dim (sdate) = 377 176 30] файл в качестве индекса, но с ошибкой: [1] 1982 Ошибка в tapply (seq_len (22L), списке (sdate[year] = 305L), функции (x): аргументы должны иметь одинаковую длину Дополнительно: предупреждающее сообщение: В дату [год - 1]: с (326: 340): числовое выражение имеет 15 элементов: только первый использованный

# количество осадков Prec <-array (0, тусклое = пУеаг) </p>

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])

  }
}
...