簡體   English   中英

從R中的時間序列中刪除前導零

[英]Remove leading zeros from time series in R

我有以下模式的時間序列,我想知道是否有人可以分享一個巧妙的技巧來刪除前導零。 我要避免的原因是,它可能會對預測模型的選擇產生負面影響。

時間序列示例:

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[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

為什么要這樣做呢? cumsum是:

cumsum(TimeSeries)
 [1]   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   9  19  29  45  52  65  65  74  75
[33]  86  88  99 102 113 117 118 138 151 169 188 204 220 236 251 265 292 316 351 359 377 398 418 418 437 459 477 498

因此,僅在只有零的情況下,結果等於零。 如果時間序列中途某處為零,則總和不會更改,但不會為零。

如果時間序列中存在負值,則可以使用:

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

TimeSeries[TimeSeries != 0] ...對我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
>

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM