2 つのネストされたループを作成するにはどうすればよいですか?こんにちは。次のワークフローに従うスクリプトを作成しようとしています。
1 - 特定の開始日時 (例: 2021 年 10 月 1 日 11:00 AM) にループを開始します。これを行 n と呼びます。Col1[row n]から値を取得します。
2 - 次の行 n+1 に進みます。列2 = 列1 [n+1] - 列1[n]を設定します。
3 - 次の行 n+2 に進み、col2 =col1 [n+2] -col1[n] を設定します。
4 - 次の行 n+3 に進み、col2 =col1[n+3] -col1[n] を設定します。datetime[n+k] = datetime[n] + 7 日になるまで、後続の各行のループを続けます。(k はループの進行に伴う行間の時間増分に応じて変化することに注意してください。たとえば、問題の行に応じて、ある行から次の行までの時間は 5 分、15 分、1 時間などずつ増加します。)
5 - ステップ 4 で取得した新しい「開始日」を使用して、新しい週のデータごとにステップ 1 ~ 4 を繰り返します。さらに 7 日間のデータのループを続けます。
6 - データテーブルの行がなくなるまでステップ 5 を繰り返します。
目標は、1 週間分の行をその週の最初の行と比較する Col1 データの計算を実行し、これを後続の各週 (第 2 週、第 3 週、第 4 週など) ですべての行が完了するまで何度も繰り返すことです。行が処理されました。:)
品質およびプロセスエンジニアリングRe: 2 つのネストされたループを作成するにはどうすればよいですか?ありがとうヴィンス!これは役に立ちます。今は正しい道を進んでいると思います。:)
Re: 2 つのネストされたループを作成するにはどうすればよいですか?さて、あなたが言っているように聞こえます
各フローから毎日最も早いフロー ポイントを差し引きますか?それがあなたがやろうとしていることですか?午前13時15分というのは関係ないと思うので、そう推測しています。:D
Names default to here(1);
dt = current data table(); // this assumes your table
// I'm going to make a bunch of extra columns to kind of show you smaller steps
// we really want to be able to say, This is the first row of the day
// so let's make a date column
dt << New Column("Just Date", <<FORMULA></FORMULA>
その日の最小の行を取得したら、最後の新しい列を、差を計算したい列の数だけ何度でも実行するだけで済みます。
ネストされた for ループに関する最初の質問に間違いなく答えていないので、物事を過度に複雑にしないことを願っています。
Re: 2 つのネストされたループを作成するにはどうすればよいですか?あなたが言っていることを推測したサンプル表を作成しました。今日は () + 1 行あたり 1 秒で完成しました。
テーブルについて何も知らなかったので、すべての列を実行するようにしました。
そしてあなたの元の投稿が理解できません。
Re: 2 つのネストされたループを作成するにはどうすればよいですか?スクリプトは、5 行と次の 6 列を含む新しいテーブルを作成しました。
週 1、週 2、週 3、週 1 の比較、週 2 の比較、週 3 の比較。
(5 行は、2021/10/13 8:18:05 AM から 2021/10/13 8:18:09 AM までの日付時刻を表していました。)
既存のテーブルに新しい列を 1 つだけ作成しようとしています。これは、元の投稿で説明した計算結果を含む列です。元のデータ テーブルのすべての行と、元の投稿の説明に従って計算された 1 つの新しい列を用意します。
Re: 2 つのネストされたループを作成するにはどうすればよいですか?文脈のために、役立つ場合は私の実際の JMP テーブルを添付します。(「Pred Formula LOG_ECOLI_PEAR」列に基づいて計算したいと考えています。)
Re: 2 つのネストされたループを作成するにはどうすればよいですか?ありがとう、ヴィンス。私は今これを経験しています...JSL 初心者 (!) として、あなたのアプローチに従うのに役立ついくつかの質問があります。新しいデータテーブルに 5 行を追加したのはなぜですか?なぜ「値を設定する」必要があり、なぜこれら 5 つの数字が選択されたのでしょうか?スクリプトは 3 週間ですが、実際のデータセットには約 120 週間あります。
最後に、スクリプトはどの列が計算対象の値 (つまり、この例では「フロー」) であるかをどのようにして知るのでしょうか?(私のデータテーブルには、例で示した 3 つよりも多くの列があります。) 列を切り替えるよりも、列名を割り当てる方が簡単ではないでしょうか。おそらくここで何かが欠けています。
Re: 2 つのネストされたループを作成するにはどうすればよいですか?もちろん。ありがとう。例として Excel で作成したデータセットのスニペットを添付します。
Re: 2 つのネストされたループを作成するにはどうすればよいですか?もしかしたらこんなことを言っているのではないかと思いますが?
Names default to here(1);
dt = New Table( "Untitled 1133",
Add Rows( 5 ),
New Column( "Week1",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week3",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
)
);
nc = ncols(dt);
for(i=1, i<=nc, i++,
col_name = column(i) << Get Name(); // get the original column name
Eval(EvalExpr( // you have to do this so you can substitute in the actual col_name instead of a variable
dt << New Column(col_name || " comparison",
// just take current row minus first row
formula(Expr(column(dt, col_name))[row()]-Expr(column(dt, col_name))[1])
)
));
);
Re: 2 つのネストされたループを作成するにはどうすればよいですか?予想されるデータを記載した小さなデータテーブルを教えていただけますか?あるいは、少なくとも使用しているデータテーブルがどのようなものであるか? 列数式を使用する方が簡単な解決策のように思えます。