2

Rを使用してSCADAデータを分析しています。

私が解決しなければならない問題は、SCADA フィードを分析し、測定値が 15 分を超えて特定の制限を超える頻度を判断することです。

これを解決できる唯一の方法は、for ループを使用することです。実際のアプリケーションには数千のポイントがあるため、プロセスが非常に遅くなります。

助言がありますか?

簡単な例:

set.seed(666)
upper_limit =1.5
sims <- 50
turb <- abs(rnorm(sims))
time <- seq.POSIXt(as.POSIXct(Sys.Date()-1), by=30, length.out=sims)
plot(time,turb, type="l")
abline(h=upper_limit, col="red", lwd=2)

参照: http://rpubs.com/pprevos/scada

この例の答えは、8 回の超過であり、これらのそれぞれの期間も知る必要があります。

4

1 に答える 1

2

時系列が 1 分間の時系列 (つまり、1 分間の時系列) である場合、以下を使用して、あるしきい値を超える間隔の長さを簡単に取得できますrle

 xx = rle(turb >1.5)
 sum(xx$values==TRUE & xx$lengths >=15)

したがって、ここでこの時系列を取得するための 1 つの解決策は、それを近似して、より正確な新しい時系列を作成することです。

library(xts)
xx = xts(turb,time)
yy = na.approx(merge(xts(,seq.POSIXt(min(time),max(time),by=1)),
      xx))
## optional plot the new and the old time series
plot(x = yy, xlab = "Time",  minor.ticks = FALSE, col = "red")
points(x = xx, col = "darkgreen",pch=20)

ここに画像の説明を入力

次に、上記で説明したように間隔の数を計算します。

xx = rle(as.vector(coredata(yy>1.5)))
sum(xx$values==TRUE & xx$lengths >=15)
[1] 6

注:ここでは、6つの間隔しか見つかりませんでした..

于 2014-10-24T07:48:15.403 に答える