転置を使用して、データのサブセットを1つのテーブルから2番目のテーブルの列に移動する再度投稿して申し訳ありません。 助けを求めて、ここにマスクされたワークフローの断片を投稿しましたが、まだ苦労しています。 本当の理由もなく、StackOverflowが怒鳴られるなどの悪い経験をしたため、応答を確認するのが困難です。 傷跡は時間とともに治ると確信しています。 とにかく、私は周りにいます、そして私は最終的にあなたの応答に到達します。
技術的なポイントに到達するには:
いくつかのサンプルが実行された日付をマニフェストファイルの3つの別々の列にコピーしようとしています(プロジェクトのラボ部分ですべてがうまくいったと仮定すると、各サンプルは3つの別々の機会に実行されるべきでした)これは、各列がデータ収集の1つのインスタンスになるように、私が収集したものから、プロジェクトの進行中のメタデータを追跡します。 それぞれがドナーIDを持つ複数のドナーがあり、「同じデータポイント」(見方によって異なります)の機器の複数の収集チャネルなど、データにある程度の冗長性がありますが、そうあるべきだと思います。
これが私が取り除こうとしている私の擬似コードであり、これまでのところ大まかなものです。 理由はわかりません。 私は経験豊富なコンピューター科学者、開発者、またはソフトウェアエンジニアではありません。 どんな助けでも大歓迎です。
DataTypes:
(associative array) DonorID{
(key) Month1: (value) date1 (empty at start)
(key) Month2: (value) date2 (empty at start)
(key) Month3: (value) date3 (empty at start)
}
find unique donor IDs in data
for each donor ID{
get (i.e. subset) data keyed on donor ID;
for Month in 1, 2, 3 (strings){
if no date in donorID associative array{
add date from data;
}else if date already{
is the date in the data table cell the same as in the associative array entry?
if yes, do nothing (indicates different target channel)
if no, ping user
Multiple run dates for same data point is a problem.
}
}
}
Copy from data to manifest:
loop over DonorID associative array:
for each donorID:
in Month 1, 2, or 3:
add date1 2 or 3 to "Actual Month [1, 2, or 3] Stability Test Date" in manifest
donorID is still row identifier
date (1, 2, or 3) is now column identifierスクリプティングRe:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するこんにちは、
コミュニティへようこそ! 助けを求めるときに他のボードで否定的な経験をしたことをお詫びします。 JMPユーザーコミュニティは歓迎的で役立つ場所ですが、探している情報を取得する可能性を最大化するための「ベストプラクティス」がいくつかあります。
具体的な、より一般的な質問をすることは、あなたがそれをやってのけることができるかどうかを決める方法です-私は時々「彼が何を知らないのかわからない」ことを理解しています。 かなりの量の擬似コードを投稿すると、人々を怖がらせる可能性があります...他の方法で質問できない場合は、「前」と「後」のファイル(およびスクリーンショット)を添付すると、視聴者が具体的に理解できるようになります。 「開始」テーブル(またはテキストデータ)と「終了」テーブルの例。 これは間違いなくこの特定のケースで本当の違いを生むでしょう。 データセットを「サニタイズ」する必要がある場合、それは問題ありません(本当に最高です)。 あなたが説明しようとしているポイントがまだ作られている限り、それはすべて良いことです。
具体的で的を絞った質問をし、説明用のファイルやスクリーンショットを含めると、ここにいる多くの人が助けに飛び込む可能性があります。 私は本当にそれに抵抗することができない多くのオフハンドを考えることができます!
乾杯、
ブレイディ
Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するありがとう、ブレイディ。Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動する皆さんこんにちは。 これまでの私のコードは次のとおりです。
Names Default To Here( 1 );
dt_data = Open( "[filepath, no issues here]" );
dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} ); //it appears in the print statements we get 3 copies, indicating this loop works
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
Write( ID ); //just a check; works
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data); //does not work
//...continue with further code to transfer from LBCM_array to manifest
);
);構造と情報(名前 'a'名、ラベル間)を保持しながら、機密情報(企業情報をスパイする心配はありません;))になるようにスクラブしました。
私の問題は、現時点ではこの行にあります。
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
エラーメッセージをスローします
.
Name Unresolved: Run date in access or evaluation of 'Run date' , :Run date/*###*/
In the following script, error marked by /*###*/
...
data_array[data] = :Run date/*###*/ <<WHERE></WHERE>
:実行日は、実験の実行日を含むデータテーブル(具体的にはdt_data)のデータ列(ヘッダー)です。 各データポイントは3回/ 3回収集されているはずなので、これらを2番目のファイルに転送しようとしています。そのため、data_arrayには、初期化時に3つのキーと3つの空の値があります。 これがデータの行き先であり、この連想配列(data_array)です。 その後、dt_manifestに転送されますが、この部分が機能すると、後で使用できます。
今のところ、私はアクセスに問題があるようです、ラインで
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
私が興味を持っている行と列の適切な選択。 この時点で、問題の説明は、聴衆の誰もが、より構文的に(そしておそらく意味的に)正しい方法でデータのサブセットを選択する方法を指定する方法について、提案し、解決策または貢献を提供するのに十分明確ですか? (data_dtから)興味がありますか?
転置の問題について心配する必要はありません。 これについては後で扱いますが、正直なところ、データがaa(連想配列)になったら非常に簡単なはずです。 この時点で、行/列の選択、データテーブルのサブセットなど、関連する問題を操作する方法をまだ学んでいます。
もう1つの注意:日付とデータと配列が混同されているのが奇妙に思われる場合は、会社の秘密を安全に保つために、データ列または関連するデータエンティティのスクラブ/匿名化のタイトル/ラベルに不適切な名前を選択したことが原因である可能性があります。 私は、私が言うこのプロセス全体ではまだ新人であり、安全側で誤りを犯すことを好みます。
私は自分の側から問題に取り組み続けます。
どうもありがとう、
マイク
Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するマイク、
連想配列を使用する理由については少し迷っていますが、それにもかかわらず、以下のコードは、各IDの3つの測定行の日付値である配列に移動すると思います。私はあなたのデータのレイアウトに似ていると思ういくつかのデータを作りました。私はあなたのステートメントとコードの使用法に基づいて推測しているだけです。

これがスクリプトです。上記のデータテーブルはスクリプトの最初に生成されるため、コードの本質は、私の変更を加えて、データテーブルの生成の下にあります。
Names Default To Here( 1 );
dt_data = New Table( "Example",
Add Rows( 6 ),
New Column( "ID", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B"} ) ),
New Column( "Run Date",
Numeric,
"Continuous",
Format( "m/d/y", 12 ),
Input Format( "m/d/y" ),
Set Values( [3692304000, 3694982400, 3697401600, 3700080000, 3702672000, 3705350400] )
),
New Column( "TimePoint", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [., ., ., ., ., .] ) )
);
//dt_manifest = Open( "[filepath, no issues here]" );
Summarize( dt_data, IDs = by( :ID ) ); //this finds all the unique IDs in the data file, which we will need //[no issues here]
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest file.
For( i = 1, i <= N Items( IDs ), i++,
ID = IDs[i];
theRows = dt_data << get rows where( :ID == ID );
data_array = Associative Array( {"data1", "data2", "data3"}, {{}, {}, {}} );
k=0;
For( data = data_array << First, !Is Empty( data ), data = data_array << Next( data ), //looping through data_array's keys is clunky but done this way in JMP
k++;
show( ID ); //just a check; works
data_array[data] = :Run date[theRows[k]];
//...continue with further code to transfer from LBCM_array to manifest
);
show(data_array);
);
コードの結果はログに一覧表示されます
ID = "A";
ID = "A";
ID = "A";
data_array = ["data1" => 3692304000, "data2" => 3694982400, "data3" => 3697401600];
ID = "B";
ID = "B";
ID = "B";
data_array = ["data1" => 3700080000, "data2" => 3702672000, "data3" => 3705350400];
data_arrayの数値は、実行日の数値です。
Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するこんにちは、
あなたが書く:
私の問題は、現時点ではこの行にあります。
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
いくつかの潜在的な問題があります...必ずこれらを調べてください。
1):実行日は、記述されているように、このコード行が解釈された時点で現在のデータテーブルの列を指します。 エラーメッセージから、このコード行の解釈時に、現在のデータテーブルに「実行日」という列が含まれていないようです。 2つのテーブルを開いているようです。どのテーブルを使用するかをJMPに任せる場合は、目的のテーブルが実際に現在のテーブルであることを常に確認してください。 [現在のデータテーブル]コマンドを使用して、現在のテーブルにしたい任意のテーブルを強制できます。
dt1 = open("firstfile");
dt2 = open("secondfile");
Current Data Table (dt1); // sets first table current
Current Data Table (dt2); //sets second table current
ただし、決定するのはJMPに任せる必要はありません。 現在使用しているかどうかに関係なく、使用するテーブルを明示的に指定できます。 table:column次のような形式:
dt1:Run Date
2)テーブル通貨の問題を修正したら、 <<行を取得するwhere()いくつかの条件を満たす行を返すために、適切なデータテーブルに送信されるメッセージ。 多くの場合、これらはあなたの場合のようにインデックスとして使用されます。 dt1を使用する場合、コードは次のように表示されます。
data_array[data] = dt1:Run Date[dt1 << Get rows Where(:ID == ID & :Timepoint == data)];
この行は3つの仕事をします:
1)いくつかの基準を満たすdt1の行を取得し、それらをベクトルで返します。 なぜなら<<行を取得where()メッセージはdt1に送信され、:IDと:Timepointもdt1にあることがわかります。
2)上記の手順1で返されたベクトルを、dt1の実行日列であるdt1:実行日へのインデックスとして使用します。 dt1:Run Dateを使用して実行日をdt1テーブルに明示的にスコープしたため、dt1がたまたま現在のテーブルであるかどうかは関係ありません。 この2番目のステップを完了すると、[実行日]列から値のベクトル(正確に必要な値)が返されます。
3)上記の手順2で返された実行日の値のベクトルを特定のキーの値として割り当てます。データ、連想配列では、 data_array 。
乾杯、
ブレイディ
Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するこんにちはジム。 ご回答ありがとうございます。 コードがどのように機能するかを人間の英語で説明していただけませんか。 私の解釈は次のとおりです。IDが一意であるすべての行がtheRowsに配置されます。 次に、インデックスkがインスタンス化されます。実行日がデータ配列に追加されるループ内でインクリメントされます。このループ内で、以前の値の代わりに、theRowsの一意の各値が、:Run dateにアクセスするためのインデックスとして使用され、その結果がデータ配列に入力されます。
私がもっと長く勉強しただけなら、これは私には理にかなっています。 一見しただけではわかりません。 わからない。 しかし、あなたはあなたの投稿の最後に一行の結論で説明します。
スクラブされたすべての変数をコード内の実際の変数に置き換えると、次のエラーが発生します。
invalid subscript (must be number or list of numbers) in access or evaluation of 'theRows[k]' , theRows[/*###*/k]
理由はわかりません。
私はまだ混乱しているので、このコードのビットを研究し続けます。 奇妙なことに、私は大学でかなりの量のコーディングクラスを受講しましたが、知識ベースを維持していないため、時間の経過とともに侵食された可能性があります。
ご協力ありがとうございました!
マイケル
PS:連想配列の理由について:Java / Pythonに沿った経験を持つ、JMP初心者としてデータを転送する効率的な方法だと思いました。 テーブルを直接操作することをお勧めしますか? しかし、私はこれまでこのルートを進んでいるので、この方法で手元のタスクを完了するのは、まったく面白いのではないかと思います。
Re:データのサブセットを1つのテーブルから2番目のテーブルの列に転置して移動するありがとう、ブレイディ。 それはすべて私には理にかなっています。
それらのいくつかは実際に私のコードの問題だったようです。 私はそれらに対処し、進んでいます。 新しい問題があります。少し理解したら投稿します。
マイク