Tabellen auf Basis von übereinstimmenden Spalten und Spalten mit der größten Übereinstimmung verknüpfenHallo,
Ich möchte zwei Tische verbinden.
Ich habe in zwei Spalten eine vollständige Übereinstimmung und in zwei anderen Spalten die engste Übereinstimmung.
Jede Tabelle mit einer anderen Zeilenanzahl.
Referenz sortiert= 108 Zeilen
Scan sortiert= 193 Zeilen
Ich möchte, dass die endgültige Tabelle alle Zeilen aus der Referenztabelle (108 Zeilen) + die passenden Daten aus der zweiten Tabelle enthält.
Spalten mit exakter Übereinstimmung:
1. Zeilenreferenz = Zeilenscan
2. Col-Referenz = Col-Scan
Spalten mit der größten Übereinstimmung:
1. X-Koordinaten-Referenz = X-Koordinaten-Scan
2. Y-Koordinaten-Referenz = Y-Koordinaten-Scan
Wenn möglich, möchte ich den Näherungswert steuern, beispielsweise den Suchbereich.
Ich habe andere Vorschläge im Forum ausprobiert: Fuzzy Merge und Nearest Rows, habe aber nicht die gewünschten Ergebnisse erzielt.
würde mich über jede Hilfe freuen.
Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungDatenzusammenführung und -bereinigungBetreff: Tabellen basierend auf übereinstimmenden Spalten und der Spalte mit der engsten Übereinstimmung verknüpfenKönnen Sie ein Beispiel für die gewünschten Ergebnisse liefern?
Betreff: Tabellen basierend auf übereinstimmenden Spalten und der Spalte mit der engsten Übereinstimmung verknüpfenHallo,
Dies ist ein Beispiel für die Ergebnisse, die ich möchte.
für die Reihen 14, 15 -
Wenn die Möglichkeit besteht, einen Suchbereich festzulegen, z. B. 30, sind diese Zeilen ohne Übereinstimmung und zeigen nur die Daten der Referenztabelle.
Wenn wir jedoch unabhängig vom Suchbereich das nächstgelegene Ergebnis nehmen, werden die Ergebnisse wie in der bereitgestellten Tabelle angezeigt.
hoffe es ist klar
Betreff: Tabellen basierend auf übereinstimmenden Spalten und der Spalte mit der engsten Übereinstimmung verknüpfenDies könnte eine Vorstellung geben
Names Default To Here(1);
dt_scan = Open("$DOWNLOADS/scan sorted.jmp");
dt_ref = Open("$DOWNLOADS/reference sorted.jmp");
dt_scan << clear select << Clear Column Selection;
dt_ref << clear select << Clear Column Selection;
dt_res = dt_ref << Join(
With(dt_scan),
By Matching Columns(:Col_Reference = :Col_Scan, :Row_Reference = :Row_Scan),
Drop multiples(0, 0),
Include Nonmatches(1, 0),
Preserve main table order(1),
Output Table("Join of reference sorted with scan sorted")
);
dt_res << New Column("Distance", Numeric, Continuous, Formula(
Sqrt(
(:X_Coordinates_Scan - :X_Coordinates_Reference)^2
+
(:Y_Coordinates_Scan - :Y_Coordinates_Reference)^2
);
));
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
dt_res << Invert Row Selection;
dt_res << Delete Rows;Betreff: Tabellen basierend auf übereinstimmenden Spalten und der Spalte mit der engsten Übereinstimmung verknüpfendanke für die schnelle Antwort.
das funktioniert super.
ich habe versucht, eine Anweisung hinzuzufügen: Wenn „Distance <30“, werden nicht die Ergebnisse, sondern nur die Referenz angezeigt.
endete jedoch ohne Ergebnisse, bei denen die Distanz >30 war.
gibt es eine Option, diese Bedingung hinzuzufügen?
Betreff: Tabellen basierend auf übereinstimmenden Spalten und der Spalte mit der engsten Übereinstimmung verknüpfenWie haben Sie versucht, es hinzuzufügen?
Das Skript wählt zunächst die Zeilen mit den Mindestabständen für jede der Gruppen und Zeilen aus, die nicht verbunden werden konnten
dt_res << Select Where(
:Distance == Col Min(:Distance, :Col_Reference, :Row_Reference, :ID_Reference)
| Is Missing(:ID_SCAN)
);
Dann wird die Auswahl umgekehrt und die umgekehrten Zeilen werden entfernt.
dt_res << Invert Row Selection;
dt_res << Delete Rows;
Sie können entweder die Auswahlbedingung so ändern, dass sie ohne Inverse funktioniert, oder überlegen, wie Sie die Inversion bei Ihrem Distanzlimit berücksichtigen würden.