我有一个时间序列的数据集(每天一次观察)。我想要做的是找到数据集中每天观察值大于零的天数。
数据集的示例如下所示:
Date Runoff
01/01/1980 0
02/01/1980 0
03/01/1980 0
04/01/1980 0
05/01/1980 4.5
06/01/1980 2
07/01/1980 0
08/01/1980 0
09/01/1980 0
10/01/1980 0
11/01/1980 0
12/01/1980 0
13/01/1980 1.2
14/01/1980 0
15/01/1980 0
16/01/1980 0
17/01/1980 0
18/01/1980 0.8
我想要的是:
Date Runoff No_Days
01/01/1980 0 4
02/01/1980 0 3
03/01/1980 0 2
04/01/1980 0 1
05/01/1980 4.5 0
06/01/1980 2 0
07/01/1980 0 6
08/01/1980 0 5
09/01/1980 0 4
10/01/1980 0 3
11/01/1980 0 2
12/01/1980 0 1
13/01/1980 1.2 0
14/01/1980 0 4
15/01/1980 0 3
16/01/1980 0 2
17/01/1980 0 1
18/01/1980 0.8 0
因此,您可以看到特定日期是否有径流,那么直到径流为止0天,如果第二天有一个径流事件,则有一天直到径流等。
我已经使用R一段时间了,这是我第一次找不到解决方案因此这是我在这里的第一个R相关问题,所以请放轻松我! / p>
如果我错过任何事情,请不要犹豫不决。
谢谢,
Ĵ
答案 0 :(得分:1)
我还在考虑rle
和seq_len
:
df$No_Days <- unlist(sapply(rle(df$Runoff)$lengths,
function(x)
if (x>1)
rev(seq_len(x))
else 0))
答案 1 :(得分:0)
这是一个更R的方式。
我正在使用rle
和一些黑客
dates.df$No_Days <-unlist(lapply(rle(dates.df$Runoff)$lengths,function(x) rev(seq(x:1))))
#now the hackish part. For those runoffs that are greater than zero
dates.df$No_Days <-ifelse(dates.df$Runoff>0,0,dates.df$No_Days)