删除R中时间序列的前导零

删除R中时间序列的前导零,r,time-series,forecasting,R,Time Series,Forecasting,我有以下模式的时间序列,我想知道是否有人可以分享一个聪明的技巧来删除前导零。我想避免的原因是,这可能会对预测模型的选择产生负面影响 时间序列示例: TimeSeries <- ts(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 10, 16, 7, 13, 0, 9, 1, 11, 2, 11, 3,

我有以下模式的时间序列,我想知道是否有人可以分享一个聪明的技巧来删除前导零。我想避免的原因是,这可能会对预测模型的选择产生负面影响

时间序列示例:

TimeSeries <- ts(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
                   0, 0, 0, 0, 0, 0, 9, 10, 10, 16, 7, 13, 0, 9, 1, 
                   11, 2, 11, 3, 11, 4, 1, 20, 13, 18, 19, 16, 16, 16, 
                   15, 14, 27, 24, 35, 8, 18, 21, 20, 19, 22, 18, 21
),start=c(2001,6),frequency=12)
我可以想象这样一个过程:通过对时间序列的子集执行多个测试来缩小前导的零序列,然后删除只有零的前导子集。然而,这将是一个繁琐的过程,可能在计算方面效率低下

有人知道已经存在有效执行此操作的函数或过程吗?

TimeSeries[TimeSeries!=0]。。。对我来说,也许是更好的出路,不过:

> TimeSeries <- ts(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
                   0, 0, 0, 0, 0, 0, 9, 10, 10, 16, 7, 13, 0, 9, 1, 
                   11, 2, 11, 3, 11, 4, 1, 20, 13, 18, 19, 16, 16, 16, 
                   15, 14, 27, 24, 35, 8, 18, 21, 20, 19, 22, 18, 21
),start=c(2001,6),frequency=12)
> TimeSeries[TimeSeries != 0]
 [1]  9 10 10 16  7 13  9  1 11  2 11  3 11  4  1 20 13 18 19 16 16 16 15 14 27
[26] 24 35  8 18 21 20 19 22 18 21
>
希望有帮助

TimeSeries[TimeSeries!=0]。。。对我来说,也许是更好的出路,不过:

> TimeSeries <- ts(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
                   0, 0, 0, 0, 0, 0, 9, 10, 10, 16, 7, 13, 0, 9, 1, 
                   11, 2, 11, 3, 11, 4, 1, 20, 13, 18, 19, 16, 16, 16, 
                   15, 14, 27, 24, 35, 8, 18, 21, 20, 19, 22, 18, 21
),start=c(2001,6),frequency=12)
> TimeSeries[TimeSeries != 0]
 [1]  9 10 10 16  7 13  9  1 11  2 11  3 11  4  1 20 13 18 19 16 16 16 15 14 27
[26] 24 35  8 18 21 20 19 22 18 21
>

希望有帮助

这将仅删除前导零,并保留其他零:

TimeSeries[cumsum(TimeSeries)!=0]
#[1]  9 10 10 16  7 13  0  9  1 11  2 11  3 11  4  1 20 13 18 19 16 16 16 15 14 27 24 35  8 18 21 20 19 22 18 21
为什么这样做? 累计金额的输出为:

因此,只有在只有零的情况下,结果才等于零。如果在时间序列的一半有一个零,那么积和不会改变,但不会为零

如果时间序列中存在负值,则可以使用:

TimeSeries[cumsum(abs(TimeSeries))!=0]

这将仅删除前导零,并保留其他零:

TimeSeries[cumsum(TimeSeries)!=0]
#[1]  9 10 10 16  7 13  0  9  1 11  2 11  3 11  4  1 20 13 18 19 16 16 16 15 14 27 24 35  8 18 21 20 19 22 18 21
为什么这样做? 累计金额的输出为:

因此,只有在只有零的情况下,结果才等于零。如果在时间序列的一半有一个零,那么积和不会改变,但不会为零

如果时间序列中存在负值,则可以使用:

TimeSeries[cumsum(abs(TimeSeries))!=0]

这将删除时间序列中的所有零。因此,如果在前一个位置包含一个零,那么这个代码也会删除这个零。所以它不是严格地关注于删除前导零,而是删除所有的零。只有前导零,但我同意@Roland的解决方案更好,即使没有解释givenTrue是真的。我已经在@Roland的解决方案中添加了这一点的解释。一旦我看到他的代码,理解起来就很简单了。这将删除时间序列中的所有零。因此,如果在前一个位置包含一个零,那么这个代码也会删除这个零。所以它不是严格地关注于删除前导零,而是删除所有的零。只有前导零,但我同意@Roland的解决方案更好,即使没有解释givenTrue是真的。我已经在@Roland的解决方案中添加了这一点的解释。一旦我看到他的代码,理解起来就相当直截了当了。请注意,只有当TimeSeries为非负时,它才能可靠地工作。另外,如果在数据帧df上运行此命令,其中column=TimeSeries,则可以运行df[cumsumdf$TimeSeries],以返回数据帧无前导零,或运行df$TimeSeries[cumsumdf$TimeSeries]]以仅返回无前导零。请注意,只有当时间序列为非负时,此命令才能可靠工作。另外,如果在数据帧df上运行此命令,其中column=TimeSeries,则可以运行df[cumsumdf$TimeSeries],以返回数据帧无前导零,或运行df$TimeSeries[cumsumdf$TimeSeries]]以仅返回无前导零。