【问题标题】:remove noise that doesn't last for a specific time range in a time series去除时间序列中不持续特定时间范围的噪声
【发布时间】:2020-03-16 19:53:12
【问题描述】:

我有一个事件频率的时间序列,如下所示:

df <- data.frame("time" = c(1:20), 
    "frq" = c(0, 1, 2, 4, 0, 1, 2, 2, 4, 3, 1, 0, 3, 2, 1, 2, 4, 2, 0, 1 ))

(假设 time 是 1 到 20 秒,只是为了更容易解释)

我正在尝试编写一个函数来过滤掉我的信号中的噪声。 如果频率不大于特定时间的背景值,我认为频率是“噪声”。

例如,假设我只想将大于 1 的频率保持超过 3 秒。 df[3:4,2] 是“噪音”,因为它们大于 1 仅 2 秒,而 df[7:10,2] 不是“噪音”,因为它们大于 1 并持续 4 秒。最终我想保留所有不是噪声的值并将所有噪声值更改为0。所以我试图想出一个过滤器,它会返回:

return_df <- data.frame("time" = c(1:20), 
   "frq" = c(0, 0, 0, 0, 0, 0, 2, 2, 4, 3, 0, 0, 0, 0, 0, 2, 4, 2, 0, 0)`

谁能给我一些建议?

【问题讨论】:

    标签: r function noise


    【解决方案1】:

    在base R中,我们可以使用rle

    df$frq[!with(rle(df$frq > 1), rep(values & lengths >= 3, lengths))] <- 0
    df
    
    #   time frq
    #1     1   0
    #2     2   0
    #3     3   0
    #4     4   0
    #5     5   0
    #6     6   0
    #7     7   2
    #8     8   2
    #9     9   4
    #10   10   3
    #11   11   0
    #12   12   0
    #13   13   0
    #14   14   0
    #15   15   0
    #16   16   2
    #17   17   4
    #18   18   2
    #19   19   0
    #20   20   0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2020-04-13
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多