我有一个事件频率的时间序列,如下所示:
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中,我们可以使用rle
df$frq[!with(rle(df$frq > 1), rep(values & lengths >= 3, lengths))] <- 0