R:删除在时间序列中的特定时间范围内不会持续的噪声

问题描述 投票:0回答:1

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

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,2]df[4,2]是“噪声”,因为它们仅在2秒钟内大于1,而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个回答
0
投票

在基数R中,我们可以使用rle

df$frq[!with(rle(df$frq > 1), rep(values & lengths >= 3, lengths))] <- 0
© www.soinside.com 2019 - 2024. All rights reserved.