こんにちは、
時間温度表1と運転開始・終了時間表2があります。時間温度ログに新しい列を追加し、セルが操作時間peroidになったらセルに「operation」というラベルを付けます。誰もがそれを行う方法を知っていますか?
ケビン、
表2は紛らわしいです、終了時間は開始時間より早いです。 温度テーブルと一致する唯一の時間は開始時間です。以下はスクリプトですが、終了時間は開始時間より遅くなると予想しました。
TimeとStart Timeが一致する2つのテーブルを結合すると、これらの開始操作を見つけることができます。JSLの2番目のブロックを参照してください。
開始時刻のみが一致したので、さまざまな操作をコピーダウンするコードを追加し、温度の安定性を視覚的に比較するための期間列を作成しました。
Names Default to Here(1);
dt1 = Data Table("Table 1 Temperature log");
dt2 = Data Table("Table 2 operation Time");
dt1 << New Column ("Operation", character);
for(i=1, i<=nrows(dt2), i++,
tbeg = dt2:Start Time[i];
tend = dt2:End Time[i];
_idx = dt1 << get rows where( tend <= dt1:Time <= tbeg);
if(nrow(_idx)>0,
dt1:Operation[_idx] = "Operation " || char(i);
); //end if
); //end for
//since there is only one row that matches, copy down
//if End Time column was the end of the operation, this would not be needed
//--copy down and get duration
dt1 << New Column("Duration", Numeric, Continuous, Format("min:s") );
_idx = dt1 << get rows where (:Operation != "");
for(i=1, i<=nrow(_idx), i++,
init = dt1:Time[_idx[i]];
If(i < nrow(_idx),
tbeg = _idx[i];
tend = _idx[i + 1] - 1;
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
, //else
tbeg = _idx[i];
tend = nrow(dt1);
dt1:Operation[tbeg :: tend ] = dt1:Operation[_idx[i] ];
);
dt1[tbeg :: tend,"Duration"] = Transpose(dt1:Time[tbeg :: tend] - init);
);
//--graph
gb = dt1 << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables( X( :Duration ), Y( :RoomTemp ), Overlay( :Operation ) ),
Elements( Points( X, Y, Legend( 9 ) ), Line( X, Y, Legend( 11 ) ) )
);
参加する
Data Table( "Table 1 Temperature log" ) << Join(
With( Data Table( "Table 2 operation Time" ) ),
By Matching Columns( :Time = :Start Time ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
)