2016-06-28 17 views
0

2つのデータセットがあります。データセット1には、2009-08-18 18:15:00で始まり、2012-11-11 22:30:00で始まる15分間隔のタイムスタンプが含まれています。データセット2には、工場で発生する障害の開始および終了タイムスタンプがあります。 6つの障害があり、これらの障害の開始時間と終了時間も15分間隔ですが、1間隔より長く続くこともあります。それらはまた、2009-08-18 18:15:002012-11-09 22:30:00の間のどこかにも似ています。私は-iは、次の障害を示すことになる欠陥、故障のために変数に時間を作成しようとしています離れて(15分あり)間隔やである私障害が間隔前に始まっ示すだろう。例えば、Rの開始時刻と終了時刻を基にした失敗までの時間可変幅

DataSet1 
    Timestamp    Sensor 1 
    2009-09-04 10:00:00  30 
    2009-09-04 10:30:00  40 
    2009-09-04 10:45:00  33 
    2009-09-04 11:00:00  23 
    2009-09-04 11:15:00  24 
    2009-09-04 11:30:00  42 

    DataSet 2 
    Start Time   End Time  Fault Type 
    09/04/09 10:45 9/4/2009 11:15  1 
    09/04/09 21:45 9/4/2009 22:00  1 
    09/04/09 23:00 9/4/2009 23:15  1 
    09/05/09 10:45 9/5/2009 11:15  1 
    09/05/09 21:30 9/5/2009 23:15  1 
    09/08/09 10:45 9/8/2009 12:30  1 

は、だから私はで終わるしたいその後、障害変数(TTF1)とに次の時間は、障害2-6私が使用することができます知っている

Timestamp    Sensor 1  TTF1 
    2009-09-04 10:00:00  30   -3 
    2009-09-04 10:30:00  40   -1 
    2009-09-04 10:45:00  33   0 
    2009-09-04 11:00:00  23   1 
    2009-09-04 11:15:00  24   2 
    2009-09-04 11:30:00  42   -41 

するためのプロセスを繰り返すことですsqldf関数は各フォールトタイプを分けていますが、フォールト変数の時間をカウントすることを始める場所はどこにもありません。私は非常に立ち往生しています、どんな助けも大いに評価されるでしょう!

+0

あなたは 'difftime()'をしたいと思う –

+0

Rで 'sqldf'を使わないでください。他の関数よりも実行に時間がかかることは知られています。 'which'と' data.table'を見てください。 –

+0

MCVEを作成することができれば、さらにカスタムソリューションを提供できます。 http://stackoverflow.com/help/mcve基本的には、質問からコードをコピーして実行し、その結果の例に基づいて必要な結果を生成するために必要なデータセットを用意することを意味しますその質問にあなたが入力したものです。しかし、私の既存の答えは、うまくいけばそのままで十分かもしれません。 –

答えて

0

あなたはこれらの2つのタイムスタンプ間の時間差を取得するために、ベースRからdifftime()機能を使用することができます。

(z <- Sys.time() - 3600) 
Sys.time() - z    # just over 3600 seconds. 
as.difftime(c("0:3:20", "11:23:15")) 
as.difftime(c("3:20", "23:15", "2:"), format = "%H:%M") # 3rd gives NA 
(z <- as.difftime(c(0,30,60), units = "mins")) 
as.numeric(z, units = "secs") 
as.numeric(z, units = "hours") 
format(z) 

私はunits = "mins"を設定することをお勧めします。 classcharacterに変換し、gsubで数値以外のデータを除外してから、as.numericでクラスを変更します。最後に15で割って15分の時間単位を取得します。必要に応じてfloorを使用して結果を丸めることができます。

+0

しかし、私の問題は、開始時刻と終了時刻の間にいくつの間隔が必要なのかということではないと思います。タイムスタンプの列(15分ごとに間隔を置いています)を使用して、障害が始まるまでの間隔をカウントダウンしてから、終了するまで何回カウントを開始してから、開始するまでカウントを再開します。ですから、基本的には何らかのifelseステートメントを実行することになると思っていますが、difftimeを使っています。しかし、私はどこから始めるべきか分かりません。申し訳ありませんが、私は非常に明確ではない場合。 – mq42

+0

@ mq42ああ、私は今それを得ると思います。あなたがそのデータを読んで、それを例解のために使うことができるように、データを出力できる方法はありますか? –

+0

構造体(list(Timestamp = structure(1:5、.Label = c( "2009-09-04 10:30:00"、 "2009-09-04 10:45:00"、 "2009-09- 04:11:00:00 "、" 2009-09-04 11:15:00 "、 " 2009-09-04 11:30:00 ")、class =" factor ")、Sensor.1 = c(30L (「タイムスタンプ」、「センサ1」)、クラス=「データフレーム」、行番号= c(NA、 -5L)) – mq42

関連する問題