0
我有每小时降雨数据,我已将每年的降雨数据分解为矩阵。这些矩阵位于名为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-让 - 一个伟大-R-重复性,例如#答案-5963610)。然后相应地编辑并改进它。一个好的帖子通常会提供*最小*输入数据,所需的输出数据和一些代码尝试 - 所有*复制粘贴运行*。它也使用适当的SO格式。海报应该扔掉任何压载物。如果可能的话,从你的问题摘要中减少你的ex。数据集和代码,同时保持完全的可重复性,一次只关注一个问题,并确保有一个突出的问题。 – lukeA