去除时间序列中不会持续特定时间范围的噪声
remove noise that doesn't last for a specific time range in a time series
我有一个事件频率的时间序列,如下所示:
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 秒只是为了更容易解释事情)
我正在尝试编写一个函数来滤除信号中的噪声。
如果频率在特定时间不大于背景值,我认为频率为 "noise"。
例如,假设我只想将大于 1
的频率保持 3 秒以上。 df[3:4,2]
是 "noise" 因为它们只比 1 大 2 秒,而 df[7:10,2]
不是 "noise" 因为它们比 1 大并且持续 4 秒。最后我想保留所有不是噪声的值,并将所有噪声值更改为 0
。所以我试图想出一个过滤器 return:
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 中,我们可以使用 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
我有一个事件频率的时间序列,如下所示:
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 秒只是为了更容易解释事情)
我正在尝试编写一个函数来滤除信号中的噪声。 如果频率在特定时间不大于背景值,我认为频率为 "noise"。
例如,假设我只想将大于 1
的频率保持 3 秒以上。 df[3:4,2]
是 "noise" 因为它们只比 1 大 2 秒,而 df[7:10,2]
不是 "noise" 因为它们比 1 大并且持续 4 秒。最后我想保留所有不是噪声的值,并将所有噪声值更改为 0
。所以我试图想出一个过滤器 return:
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 中,我们可以使用 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