Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer Spalte mit der größten Übereinstimmung?Hallo,
Ich möchte zwei Datentabellen über die „Join“-Funktion in JMP verbinden. Ich würde ihnen gerne nach Zeit und Reaktoranzahl beitreten. Dies funktioniert jedoch nicht, da die Spalte „Zeit“ in einer der Datendateien 8 Dezimalstellen und in der anderen eine Null Dezimalstellen enthält.
(Wie) wäre es möglich, die Zeit am nächstgelegenen Übereinstimmungspunkt und die Reaktornummer genau abzugleichen?
Ich habe bereits einige ältere Diskussionen zu diesem Problem gefunden. Allerdings funktionierten diese Lösungen bei mir nicht, da eine zweite Spalte „Reaktornummer“ nicht gefunden werden konnte.

Hier ist ein Screenshot der beiden Datentabellen, die ich kombinieren möchte. Die Ausgabe sollte sowohl Zeit, Reaktor, Reflexionsgrad als auch Trockengewicht enthalten.
Vielen Dank im Voraus!
Datenmischung und -bereinigungBetreff: Wie verbinde ich Tabellen basierend auf einer vollständig übereinstimmenden Spalte und einer am besten übereinstimmenden Spalte?Weist der von Ihnen bereitgestellte Beispieldatensatz falsche Werte auf?
Erstellen Sie die Spalte „Trockengewicht g/l“ und benennen Sie „Zeit h“ in „Zeit h“ in den Reflexionsdaten um:

Verknüpfen Sie die Trockengewichtsdaten damit:

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

An dieser Stelle könnten Sie einige Hilfsformeln oder Skripte erstellen, um den nächstgelegenen 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 kopieren und in eine neue Spalte einfügen und eine Formel erstellen, um die nächste Zeile zu berechnen.

Dies ist, was „Nächste Zeilen verbinden“ zurückgeben würde, wenn „Verbinden“ verwendet wird:

Mit Update werden nicht so viele unordentliche Spalten erstellt:

Die Benutzeroberfläche der Tools scheint ein Problem mit der Tabellenauswahl zu haben ... und der Benutzer muss sicherstellen, dass die Tabellen richtig oder ausgewählt sind, sonst führt das Tool eine Selbstverknüpfung durch.
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, da es bis zu 24 Gruppen/Reaktoren gibt und man durch viele Zeitpunkte scrollen muss. Teilmengen erstellen? Wie würden Sie sich das vorstellen?
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 Spalte mit 8 Ziffern rundet, und diese ergänzen?
**Bearbeiten** Egal.Ich verstehe sofort, warum.
Sie könnten nur eine Teilmenge 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?Könnten Sie kleine Beispieldatensätze bereitstellen, die in beiden Datentabellen (und im besten Fall auch in der Tabelle mit korrekten Ergebnissen) mehrere Reaktoren enthalten? Wenn es nicht zu viele Gruppen gibt und kein Bedarf an Automatisierung besteht, ist dies möglicherweise von Hand möglich. Sie könnten vielleicht das fuzzy_merge-Add-In verwenden und viele Teilmengen verwenden, um die Bioreaktorgruppen zu verwalten.
Ich habe auch ein Skript (und ein Tool), das dazu in der Lage sein sollte, aber Ich hatte noch keine Zeit, es vollständig zu testen , und ich weiß mit Sicherheit, dass es immer noch einige kleine Fehler hat. Das Tool „Nächste Zeilen verbinden“ sollte in der Lage sein:
- Treten Sie je nach Entfernung bei
- Verknüpfen Sie Tabellen rückwärts, vorwärts und nächst (mit optionalen Tie-Break-Optionen)
- Gruppierung zulassen
- Erlauben Sie die Verwendung von Toleranz
- Sollte keine sortierten Datentabellen erfordern
