У меня есть 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])
}
}