我在C ++中编写了一个函数,它执行以下操作:给定(可能很长)向量x
和阈值thr
,找到{{1}的子序列y
这样x
,x[1]∈y
和x[length(x)]∈y
≥∀i∈1:length(y) y[i+1]-y[i]
。目的是找到thr
的简短子序列,其中x
“与plot(x)
看起来相同”,因为图表的分辨率为plot(x[subsequence])
。
该函数是R包的一部分,使用thr
接口调用C ++函数。来源是:https://gist.github.com/kenahoo/8922376。 (它实际上是在Rcpp
上运行,而不是简单的向量,但它相当于作为向量独立地操作每个列,然后合并索引序列。)
我想找到一个同样的纯R解决方案,它很好用。有效 - 一个明显的想法就像data.frame
,但这 不 是合适的,因为它会错过随着时间的推移积累的值中的任何缓慢漂移超过which(diff(x)>thr)
。
示例:
thr
产生这样的近似值:
> set.seed(123)
> x <- cumsum(runif(100, -1, 1))
> y <- downsampleForPlot(data.frame(x=x), 2.5)
> y
[1] 1 11 26 46 57 71 81 100
欢迎提出任何想法。