У меня есть данные о дождевых осадках, которые я разделил по годам на матрицы. Матрицы находятся в списке под названием tenyr.matrix.list
. Я хочу разделить данные о дождевых осадках на события, основанные на межведомственном периоде в 6 часов.Разбиение временных рядов данных на события в R (повтор/цикл)
Код, приведенный ниже, является моей попыткой. Я использовал маску для определения следующего значения 0 или следующего значения, которое не равно нулю для определения конца и начала событий. Затем я использовал цикл повтора, чтобы повторить этот процесс до тех пор, пока не будет 6-часовой промежуток между окончанием события и началом следующего события (если есть события, близкие друг к другу, которые содержат 0 между ними).
Это работает, если в событиях нет пробелов, однако там, где есть пробелы, код печатает только конец события за пределами нулевого значения, а не предшествующие значения.
например. Если событие:
2006/12/12 07.00 5; 2006/12/12 08.00 10; 2006/12/12 09.00 7;
2006/12/12 10.00 3; 2006/12/12 11.00 1.
Вот что код печатает.
Однако если событие:
2006/12/12 07.00 5, 2006/12/12 08.00 0, 2006/12/12 09.00 7, 2006/12/12
10.00 3, 2006/12/12 11.00 1.
Кодовые печатает только вторую часть за нуль: 2006/12/12 09.00 7, 2006/12/12 10.00 3, 2006/12/12 11.00 1.
Может кто-нибудь объяснить, что мне не хватает?
mask <- (tenyr_matrix.list[[j]]) #create a mask matrix
for (x in c(1:68)){
firstnonzero <- which(mask[,2]!=0 & mask[,2]!=9999)[1] #first nonzero
repeat {
nonzero <- which(mask[,2]!=0 & mask[,2]!=9999)[1] #nonzero
mask[1:nonzero,2]=9999 #set values up to nonzero to 9999
zero <- which(mask[,2]==0)[1] #first zero after event
mask[1:zero,2]=9999 #set values up to zero to 9999
nonzero2 <- which(mask[,2]!=0 & mask[,2]!=9999)[1] #find next nonzero
#mask[1:nonzero2,2]=9999 #set values up to zero to 9999
if (((tenyr_matrix.list[[j]][nonzero2,1]-tenyr_matrix.list[[j]] [zero-1,1])/(60*60))>=6 | is.na(nonzero2))
print(tenyr_matrix.list[[j]][firstnonzero:(zero-1),])
break
}
} #end of x
дайте небольшой пример представительных данных. ПОЖАЛУЙСТА, пожалуйста, сделайте свой текст коротким! вы можете привести пример, чтобы человек, который не знает вашу проблему, следует вашему вопросу. – Learner
Пожалуйста, прочитайте [как предоставить минимальные воспроизводимые примеры в R] (http://stackoverflow.com/questions/5963269/how-to- Make-A-пра-р-воспроизводимая-пример # ответ-5963610). Затем отредактируйте и улучшите его соответствующим образом. Хороший пост обычно обеспечивает * минимальные * входные данные, желаемые выходные данные и некоторые попытки кода - все * copy-paste-run'able *. Он также использует правильные SO-формы. Плакат должен сбросить балласт. Резюме из вашей проблемы, если это возможно, сводит к минимуму ваш ex. набора данных и кода, сохраняя при этом полную воспроизводимость, сосредоточьтесь на одной проблеме одновременно и убедитесь, что есть вопрос, который выделяется. – lukeA