転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動する再度投稿して申し訳ありません。助けを求めて、ワークフローの一部をマスクしてここに投稿しましたが、まだ苦労しています。StackOverflow で理由もなく怒鳴られたり、そのような嫌な経験をしたことがあるので、返信を確認するのが困難です。傷は時間が経てば癒えると確信しています。とにかく、私はここにいるので、いつかあなたの返信に返信します。
技術的な点について言えば:
私は、いくつかのサンプルが実行された日付 (私が不在だったプロジェクトのラボ部分ですべてがうまくいったと仮定すると、各サンプルは 3 回別々に実行されるはずでした) を、私が収集した情報から、各列がデータ収集の 1 つのインスタンスになるように、プロジェクトの進行中のメタデータを追跡するマニフェスト ファイルの 3 つの別々の列にコピーしようとしています。ドナーにはそれぞれドナー 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: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動する今、正しいIDを持つ行のマニフェストファイルにデータ/日付を割り当てようとしています:
... );
//write(LBCM_array);
dt_manifest << Get Rows Where(dt_manifest:ID Number for Updating Table == ID)[:Actual Data 1 Date] = data_array["data1"];
//repeat for data 2 & 3
);
本当に、私はまだ初心者としてJSLから行う方法がわからないので、エラーが発生します
["data1" => {}, "data2" => {}, "data3" => {}]
attempting to assign to an object that is not an L-value in access or evaluation of 'Assign' , dt_manifest << Get Rows Where(
dt_manifest:ID Number for Updating Table == ID
)[:Actual Data 1 Date] = /*###*/data_array["data1"] /*###*/これが何を意味するのかわかりません。
ありがとう、
マイク
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動する以下は私のために働く...
Names Default To Here( 1 );
dt_data = Open("...");
Summarize( dt_data, IDs = by(dt_data:ID)); //this finds all the unique donor IDs in the data file, which we will need
//First, populate the temporary data structure--associative array--from the data file which we will then copy over to the manifest data file.
For(i = 1, i <= N Items(IDs), i++,
ID = num(IDs[i]); //the type conversion here is important, or else a key-value call in the associative array below doesn't work
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
data_array[data] = dt_data:Run date[dt_data << Get rows Where(:ID == ID & :Timepoint == data)]
);
);ただし、data_array に各データ (日時ポイント) エントリの複数のコピーがあります。 data_array 内の各日付/データのコピーを 1 つだけ作成して、そのクリーンをスクラブする方法を知りたいですか?
As Date() ステートメントを使用して日付を比較およびフォーマットし、比較と入力のために if ステートメントを試して、一意の値が 1 つだけ得られるようにしました。 しかし、これまでのところ問題が発生しています (つまり、配列がエラーになるか、再び空になります)。
しかし、これまでの進歩には本当に満足しています。
@txnelson : 申し訳ありませんが、私はあなたの方法が好きで、あなたの助けに感謝します. (同じ値の日付が複数ある場合、あなたのメソッドはどのように公平になるのだろうか。
@ブレイディ_ブレイディ: 必要に応じて、列呼び出しの前にデータ テーブル識別子を実装したことに注意してください。 この基本的な概念を教えてくれてありがとう。私はそれについての好奇心が死にかけていて、今まで結果が出ずに終わりませんでした.
マイク
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するこんにちは、みんな。 進むべき方向がわからないまま何かに行き詰まるのではなく、実際には、一度だけ進歩しています。
現在、キーと値のペアの 1 つが適合しないため、配列呼び出しの 1 つから誤った結果が得られています。 これをデバッグしようとしているので、連想配列に転送したいものにデータテーブルを正しくサブセット化/フィルタリングできます。
ご協力ありがとうございました。
マイクRe: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するありがとう、ブレイディ。 それはすべて私にとって理にかなっています。
これらのいくつかは、実際には私のコードの問題だったようです。 私はそれらに対処し、進んでいます。 私はそれらを少し理解したら投稿する新しい問題を持っています。
マイク
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するこんにちはジム。 返信ありがとうございます。 あなたのコードがどのように機能するかを人間の英語で説明していただけませんか? 私の解釈は次のとおりです。ID が一意であるすべての行が theRows に配置されます。 次に、インデックス k がインスタンス化されます。実行日がデータ配列に追加されるループ内でインクリメントされます。このループ内では、以前の代わりに、theRows の各一意の値が :Run date にアクセスするためのインデックスとして使用され、その結果がデータ配列に取り込まれます。
もっと長く勉強してさえいれば、これは私には理にかなっているでしょう。 ぱっと見ではあまりわかりません。 わからない。 しかし、投稿の最後で 1 行の結論を説明しています。
スクラブされたすべての変数をコード内の実際の変数に置き換えた後、次のエラーが表示されます。
invalid subscript (must be number or list of numbers) in access or evaluation of 'theRows[k]' , theRows[/*###*/k]
理由はわかりません。
私はまだ混乱しているので、このコードの研究を続けます。 奇妙なことに、私は大学でかなりの量のコーディングクラスを受講しましたが、知識ベースを維持していないため、時間の経過とともに侵食された可能性があると思います.
ご協力ありがとうございました!
マイケル
PS: 連想配列を使用する理由について: Java/Python の経験が豊富な JMP 初心者として、データを転送する効率的な方法だと考えました。 テーブルを直接操作することをお勧めしますか? しかし、私はこの道をかなり進んでいますが、この方法で目の前のタスクを完了するのはまったく面白いのではないかと思います.
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するやあ、
あなたが書く:
私の問題は、現時点では次の行にあります。
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
潜在的な問題がいくつか見られます...これらを必ず調べてください。
1) :Run Date は、書かれているように、このコード行が解釈された時点で最新のデータ テーブルの列を参照します。 エラー メッセージから、このコード行を解釈した時点では、現在のデータ テーブルに「実行日」という列が含まれていないようです。 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 に任せる必要はありません。 を使用して、使用するテーブルを明示的に指定できます。表:列次のような形式:
dt1:Run Date
2) テーブル通貨の問題を修正したら、 << 行を取得 ( )メッセージが適切なデータ テーブルに送信され、いくつかの基準を満たす行が返されます。 多くの場合、これらはインデックスとして使用されます。 dt1 を使用する場合、コードは次のようになります。
data_array[data] = dt1:Run Date[dt1 << Get rows Where(:ID == ID & :Timepoint == data)];
この行は 3 つのジョブを実行します。
1) いくつかの条件を満たす dt1 の行を取得し、それらをベクトルで返します。 注意してください<<行を取得します()メッセージが dt1 に送信されると、:ID と :Timepoint も dt1 にあることがわかります。
2) 上記の手順 1 で返されたベクトルを、dt1 の実行日列である dt1:Run Date へのインデックスとして使用します。 dt1:Run Date を使用して Run Date の範囲を dt1 テーブルに明示的に設定したため、dt1 がたまたま現在のテーブルであるかどうかは問題ではありません。 この 2 番目のステップが完了すると、値のベクトル (正確に必要な値) が Run Date 列から返されます。
3) 上記のステップ 2 で返された Run Date 値のベクトルを特定のキーの値として割り当てます。データ、連想配列で、データ配列.
乾杯、
ブレイディ
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するマイク、
連想配列を使用する理由については少し迷っていますが、それでも、以下のコードが配列に移動し、各 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: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動する皆さんこんにちは。 これまでの私のコードは次のとおりです。
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>
:Run date は、データ テーブル (具体的には dt_data) のデータ列 (ヘッダー) で、実験の実行日が含まれています。 これらを 2 番目のファイルに転送しようとしています。各データ ポイントは 3 回または 3 回収集される必要があるため、初期化時に data_array に 3 つのキーと 3 つの空の値があるのはそのためです。 これがデータの行き先、この連想配列 (data_array) です。 その後、dt_manifest に転送されますが、それはこの部分が機能するようになった後のことです。
今のところ、アクセスに問題があるようです。
data_array[data] = :Run date << Where(:ID == ID & :Timepoint == data);
関心のある行と列の適切な選択。 この時点で、聴衆の誰もが参加して、より構文的に (そしておそらく意味的にも) 正しい方法でデータのサブセットを選択する方法を指定する方法について解決策または貢献を提供できるほど、問題の説明は明確ですか? (data_dt から) に興味がありますか?
転置の問題について心配する必要はありません。 これについては後で説明しますが、正直なところ、データが aa (連想配列) に入っていれば、非常に簡単なはずです。 この時点で、私はまだ行/列の選択、データ テーブルのサブセットなどを操作する方法を学んでいます。関連する問題です。
もう 1 つ注意: 日付とデータと配列が混同されているのがおかしいと思われる場合は、おそらく、会社の秘密を安全に保つために、データ列または関連するデータ エンティティのスクラビング/匿名化タイトル/ラベルに不適切な名前を選択したことが原因です。 私はまだこのプロセス全体の初心者であり、安全面で間違いを犯すことを好みます.
私は自分の側から問題に取り組み続けます。
どうもありがとう、
マイク
Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するありがとう、ブレイディ。Re: 転置を使用して、あるテーブルから別のテーブルの列にデータのサブセットを移動するやあ、
コミュニティへようこそ! 助けを求めたときに、他の掲示板で否定的な経験をしたことをお詫びします。 JMP ユーザー コミュニティは歓迎的で役立つ場所ですが、必要な情報を入手する可能性を最大限に高めるための「ベスト プラクティス」がいくつかあります。
具体的で、より一般的な質問をすることは、それをやってのけることができれば進むべき道です. 疑似コードのかなりの部分を投稿すると、人々を怖がらせる可能性があります...他の方法で質問できない場合は、「前」と「後」のファイルとスクリーンショットを添付すると非常に役立ちます。 「開始」テーブル (またはテキスト データ) と「終了」テーブルの例。 これは、この特定のケースでは間違いなく大きな違いを生むでしょう。 データセットを「サニタイズ」する必要がある場合は、それで問題ありません (本当に最高です)。 あなたが例証しようとしている点が依然として示されている限り、それはすべて良いことです.
具体的で的を絞った質問をし、説明用のファイルとスクリーンショットを含めると、ここにいる多くの人が助けてくれる可能性があります. 本当にそれに抵抗できない無造作な人は少なくないと思います!
乾杯、
ブレイディ