こんにちは
さまざまな ID のプロセスステップとプロセス時間の表があります。 ただし、プロセスの一部のステップは、ID ごとにプロセス内で複数回発生します。 全工程を「合成」か「加工」に分けて列を作成したいと考えています。 これらのグループは、別のプロセス ステップの前に発生するか後に発生するかに基づいて決定されます。
数式で各 ID のスポーン ステップの時間を見つけて、それをその ID の他のすべてのプロセス ステップの時間と比較したいと考えています。
ある種のループを使用しようとしましたが、スクリプト作成が初心者なので、ループは非常にわかりにくいです。
これを行う方法はありますか?
たとえば、私が持っているものは次のようになり、Category列を追加したいと考えています。
| ID | プロセスステップ | 処理時間 | カテゴリー |
| 10 | 乾燥 | 9:00 | 合成 |
| 10 | スポーン済み | 9:30 | 合成 |
| 10 | 乾燥 | 10:00 | 処理 |
| 10 | 終了した | 11:00 | 処理 |
| 11 | 乾燥 | 2:00 | 合成 |
| 11 | スポーン済み | 2:30 | 合成 |
| 11 | 乾燥 | 2:45 | 処理 |
| 11 | 終了した | 4:00 | 処理 |
| 12 | 乾燥 | 7:30 | 合成 |
| 12 | スポーン済み | 7:45 | 合成 |
| 12 | 乾燥 | 8:00 | 処理 |
| 12 | 終了した | 9:00 | 処理 |
何か案は??
ありがとう!
このスクリプトはあなたが望むもののようです。 ご希望であれば、式に変えることもできます
Names Default To Here( 1 );
dt = New Table( "Untitled 13",
Add Rows( 12 ),
New Column( "ID",
Character,
"Nominal",
Set Values( {"10", "10", "10", "10", "11", "11", "11", "11", "12", "12", "12", "12"} )
),
New Column( "Process Step",
Character( 16 ),
"Nominal",
Set Values(
{"Drying", "Spawned", "Drying", "Finished", "Drying", "Spawned", "Drying", "Finished", "Drying", "Spawned", "Drying",
"Finished"}
)
),
New Column( "Process Time",
Numeric,
"Nominal",
Format( "h:m", 12 ),
Input Format( "h:m" ),
Set Values( [32400, 34200, 36000, 39600, 7200, 9000, 9900, 14400, 27000, 27900, 28800, 32400] )
)
);
dt << New Column( "Category", Character );
For( i = 1, i <= N Rows( dt ), i++,
currID = dt:id[i];
If( i == 1,
spawnTime = dt:Process Time[(dt << get rows where( dt:id == currID & dt:Process Step == "Spawned" ))[1]]
);
If( i > 1,
If( dt:ID[i] != dt:ID[i - 1],
spawnTime = dt:Process Time[(dt << get rows where( dt:id == currID & dt:Process Step == "Spawned" ))[1]]
)
);
If( dt:Process Time[i] <= spawnTime,
dt:Category[i] = "Synthesis",
dt:Category[i] = "Processing";
);
);
スクリプトは、データが ID でソートされていることを前提としています。 ただし、spawnTime がデータのループごとに新たに計算された場合は、テーブルを並べ替える必要はありません。 各ループで SpawnTime を計算するため、スクリプトの速度が低下しますが、これはトレードオフとして考慮する必要があるかもしれません。