1つの完全に一致する列と1つの最も近い一致に基づいてテーブルを結合するにはどうすればよいですか?こんにちは、
JMPの「join」関数を使用して2つのデータテーブルを結合したいと思います。 時間と原子炉数に基づいて参加したいと思います。 ただし、列 'time'のデータファイルの1つに小数点以下8桁があり、他の1つに小数点以下1桁があるため、これは機能しません。
(どのように)最も近いマッチングポイントとリアクター番号で時間を正確にマッチングすることは可能でしょうか?
私はすでにこの問題についていくつかの古い議論を見つけました。 ただし、2番目の列の「リアクター番号」を一致させることができなかったため、これらのソリューションは機能しませんでした。

これが私が結合したい2つのデータテーブルのスクリーンショットです。 出力には、時間、反応器、反射率、乾燥重量の両方が含まれている必要があります。
前もって感謝します!
データ表Re:完全に一致する1つの列と最も一致する1つの列に基づいてテーブルを結合するにはどうすればよいですか?両方のデータテーブル(そして最良の場合は正しい結果のテーブル)に複数のリアクターがある小さなサンプルデータセットを提供できますか? これは、グループが多すぎず、自動化の必要がない場合は、手動で実行できる可能性があります。 fuzzy_mergeアドインを使用し、多くのサブセットを使用してバイオリアクターグループを管理することができます。
これを実行できるはずのスクリプト(およびツール)もありますが、まだ完全にテストする時間がありません、そして私はそれがまだいくつかのわずかなバグを持っていることを確かに知っています。 最も近い行を結合するツールは、次のことができるはずです。
- 距離に基づいて参加する
- テーブルを後方、前方、および最も近い場所に結合します(オプションのタイブレーカーオプションを使用)
- グループ化を許可する
- 公差の使用を許可する
- データテーブルを並べ替える必要はありません

Re:完全に一致する1つの列と最も一致する1つの列に基づいてテーブルを結合するにはどうすればよいですか?8桁の列の時間を丸める新しい列を作成し、それに結合してみませんか?
**編集**気にしないでください。理由はすぐにわかります。
次の手順を実行すると、最も近い時間のみのサブセットを取得できます。
Names default to here(1);
dt = New Table( "Example",
New Column( "Time",
Set Values( [14.14, 14.28, 13.56, 13.11, 12.32, .] )
)
);
dt << New Column("Rounded Time",
Formula(Round(:Time, 0))
);
// we're just going to for the row that the value for time - rounded time = the min for that value
dt << New Column("Closest",
Formula(
Abs(:Time - :RoundedTime) == ColMin(Abs(:Time - :RoundedTime), :RoundedTime)
)
);
Re:完全に一致する1つの列と最も一致する1つの列に基づいてテーブルを結合するにはどうすればよいですか?お返事をありがとうございます! はい、小さな例をアップロードします。
私はかつて手動でそれを試みましたが、最大24のグループ/リアクターがあり、多くの時点をスクロールする必要があるため、時間がかかりました。 サブセットを作成しますか? それがどのように機能していると思いますか?
Re:完全に一致する1つの列と最も一致する1つの列に基づいてテーブルを結合するにはどうすればよいですか?提供したサンプルデータセットの値が間違っていませんか?
カラム乾燥重量g / lを作成し、反射率データで時間hの名前を時間hに変更します。

乾燥重量データを次のように連結します。

反応器と時間h列を選択し、それらで並べ替えます。
乾燥重量で不足している値を選択->一致するセルを選択->選択を反転
これで、テーブルをジャンプして最も近い値を見つけることができます。

この時点で、データをさらに削減するために、たとえば次のような最も近い値を計算するためのいくつかの役立つ数式またはスクリプトを作成できます。
Names Default To Here(1);
dt = Current Data Table();
r = dt << Get Selected Rows; //selecting of wanted rows could be done in script instead of datatable
r_min = r - 1;
r_max = r + 1;
dt << Subset(rows(Sort List(r||r_min||r_max)), Selected Columns(0));

この時点で、乾燥重量時間の値を新しい列にコピーして貼り付け、最も近い行を計算する式を作成できる可能性があります。

これは、Joinが使用されたときに最も近い行の結合が返すものです。

Updateを使用すると、多くの厄介な列が作成されません。

ツールのUIには、テーブルの選択に問題があるようです...ユーザーは、正しいテーブルまたは選択されていることを確認する必要があります。そうしないと、ツールが自己結合します。