Come posso unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?CIAO,
Vorrei unire due tabelle di dati tramite la funzione "join" in JMP. Vorrei unirmi a loro in base al tempo e al numero di reattori. Tuttavia, questo non funziona poiché la colonna "tempo" ha 8 decimali in uno dei file di dati e l'altro zero decimali.
(Come) sarebbe possibile far corrispondere esattamente il tempo sul punto di corrispondenza più vicino e il numero del reattore?
Ho già trovato alcune vecchie discussioni su questo problema. Tuttavia, queste soluzioni non hanno funzionato per me poiché non è stato possibile abbinare una seconda colonna "numero reattore".

Ecco uno screenshot delle due tabelle di dati che vorrei combinare. L'output dovrebbe contenere tempo, reattore, riflettanza e peso secco.
Grazie in anticipo!
Miscelazione e pulizia dei datiRi: Come posso unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?Il set di dati di esempio che hai fornito ha valori errati corrispondenti?
Crea colonna peso secco g/l e rinomina Time h in time h nei dati di riflettanza:

Concatena i dati del peso a secco a quello:

Seleziona reattore e colonna Tempo h e Ordina per loro.
Seleziona il valore mancante nel peso a secco -> seleziona le celle corrispondenti -> inverti la selezione
Ora puoi saltare intorno alla tabella per trovare i valori più vicini:

A questo punto potresti creare alcune formule o script di aiuto per calcolare il valore più vicino, ad esempio qualcosa del genere per ridurre ulteriormente i dati:
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));

A questo punto è molto probabile che tu possa copiare e incollare i valori del tempo di peso a secco in una nuova colonna e creare una formula per calcolare la riga più vicina.

Questo è ciò che unire le righe più vicine restituirebbe quando si utilizza Join:

Con Update non creerà tante colonne disordinate:

L'interfaccia utente degli strumenti sembra avere qualche problema sulla selezione della tabella ... e l'utente deve assicurarsi che le tabelle corrette o selezionate o lo strumento si uniscano automaticamente.
Ri: Come posso unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?Grazie per la tua risposta! Caricherò un piccolo esempio sì.
Una volta ho provato a farlo manualmente, ma ci è voluto tutto il tempo in cui ci sono fino a 24 gruppi/reattori e dovrai scorrere molti punti temporali. Creazione di sottoinsiemi? Come lo vedresti funzionare?
Ri: Come posso unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?Perché non creare semplicemente una nuova colonna che arrotonda () il tempo per quella con 8 cifre e si unisca a quella?
**Modifica** Non importa.Capisco subito perché.
È possibile ottenere un sottoinsieme solo del tempo più vicino procedendo come segue
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)
)
);
Ri: Come posso unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?Potresti fornire piccoli set di dati di esempio che hanno più reattori su entrambi i datatable (e nel migliore dei casi anche tabelle con risultati corretti)? Questo potrebbe essere possibile farlo a mano se non ci sono troppi gruppi e non c'è bisogno di automazione. Potresti forse usare l'addin fuzzy_merge e usare molti sottoinsiemi per gestire i gruppi di bioreattori.
Ho anche uno script (e uno strumento) che dovrebbe essere in grado di farlo, ma Non ho ancora avuto il tempo di testarlo completamente , e so per certo che ha ancora alcuni piccoli bug. Lo strumento Unisci righe più vicine dovrebbe essere in grado di:
- Unisciti in base alla distanza
- Unisci i tavoli all'indietro, in avanti e al più vicino (con opzioni di spareggio opzionali)
- Consenti raggruppamento
- Consenti l'uso della tolleranza
- Non dovrebbe essere necessario disporre di datatable ordinati
