Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden?Hallo,
Ich möchte zwei Datentabellen über die 'Join'-Funktion in JMP verbinden. Ich möchte mich ihnen basierend auf Zeit und Reaktornummer anschließen. Dies funktioniert jedoch nicht, da die Spalte „Zeit“ in einer der Datendateien 8 Dezimalstellen und die andere null Dezimalstellen enthält.
(Wie) wäre es möglich, die Zeit am nächsten übereinstimmenden Punkt und die Reaktornummer genau abzugleichen?
Ich habe bereits einige ältere Diskussionen zu diesem Problem gefunden. Diese Lösungen funktionierten jedoch nicht für mich, da eine zweite Spalte „Reaktornummer“ nicht abgeglichen werden konnte.

Hier ist ein Screenshot der beiden Datentabellen, die ich kombinieren möchte. Die Ausgabe sollte sowohl Zeit, Reaktor, Reflexion als auch Trockengewicht enthalten.
Vielen Dank im Voraus!
DatentabelleBetreff: Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden Spalte?Könnten Sie kleine Beispieldatensätze bereitstellen, die mehrere Reaktoren in beiden Datentabellen enthalten (und im besten Fall auch Tabellen mit korrekten Ergebnissen)? Dies kann möglicherweise manuell erfolgen, wenn nicht zu viele Gruppen vorhanden sind und keine Automatisierung erforderlich ist. Sie könnten vielleicht das Add-in fuzzy_merge verwenden und viele Teilmengen verwenden, um die Bioreaktorgruppen zu verwalten.
Ich habe auch ein Skript (und ein Tool), das dies können sollte, aber Ich hatte noch keine Zeit es komplett zu testen , und ich weiß mit Sicherheit, dass es immer noch einige leichte Fehler hat. Das Werkzeug „Nächste Reihen verbinden“ sollte in der Lage sein:
- Treten Sie basierend auf der Entfernung bei
- Tische rückwärts, vorwärts und zum nächsten verbinden (mit optionalen Tie-Breaker-Optionen)
- Gruppierung zulassen
- Verwenden von Toleranz zulassen
- Sollte keine sortierten Datentabellen erfordern

Betreff: Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden Spalte?Warum nicht einfach eine neue Spalte erstellen, die die Zeit für die mit 8 Ziffern rundet, und sich daran anschließen?
**Bearbeiten** Egal.Ich sehe sofort warum.
Sie könnten eine Teilmenge nur der nächstgelegenen Zeit erhalten, indem Sie wie folgt vorgehen
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)
)
);
Betreff: Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden Spalte?Danke für deine Antwort! Ich werde ein kleines Beispiel hochladen ja.
Ich habe einmal versucht, es manuell zu machen, aber es hat so lange gedauert, wie es bis zu 24 Gruppen/Reaktoren gibt, und Sie müssen durch viele Zeitpunkte scrollen. Teilmengen erstellen? Wie würden Sie sehen, dass das funktioniert?
Betreff: Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden Spalte?Hat das von Ihnen bereitgestellte Beispiel-Dataset falsche Werte?
Spalte Trockengewicht g/l erstellen und Zeit h in Zeit h in Reflexionsdaten umbenennen:

Verketten Sie die Trockengewichtsdaten damit:

Wählen Sie die Spalte Reaktor und Zeit h aus und sortieren Sie danach.
Fehlenden Wert im Trockengewicht auswählen -> übereinstimmende Zellen auswählen -> Auswahl umkehren
Jetzt können Sie in der Tabelle herumspringen, um die nächsten Werte zu finden:

An dieser Stelle könnten Sie einige Hilfsformeln oder Skripte erstellen, um den nächsten Wert zu berechnen, zum Beispiel so etwas, um die Daten weiter zu reduzieren:
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));

An dieser Stelle könnten Sie höchstwahrscheinlich die Trockengewichtszeitwerte in eine neue Spalte kopieren und eine Formel erstellen, um die nächste Reihe zu berechnen.

Folgendes würde Join Nearest Rows zurückgeben, wenn Join verwendet wird:

Mit Update werden nicht so viele unordentliche Spalten erstellt:

Die Benutzeroberfläche der Tools scheint ein Problem bei der Tabellenauswahl zu haben ... und der Benutzer muss sicherstellen, dass die richtigen Tabellen oder ausgewählt sind, oder das Tool wird sich selbst verbinden.