Come faccio a 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 "unisci" in JMP. Vorrei unirmi a loro in base al tempo e al numero del reattore. Tuttavia, questo non funziona poiché la colonna "ora" ha 8 decimali in uno dei file di dati e l'altro zero decimali.
(Come) sarebbe possibile abbinare esattamente il tempo sul punto di corrispondenza più vicino e il numero del reattore?
Ho già trovato alcune discussioni precedenti su questo problema. Tuttavia, queste soluzioni non hanno funzionato per me poiché non è stato possibile trovare una corrispondenza per il "numero del reattore" della seconda colonna.

Ecco uno screenshot delle due tabelle di dati che vorrei combinare. L'uscita dovrebbe contenere tempo, reattore, riflettanza e peso secco.
Grazie in anticipo!
Tabella datiRi: Come faccio a 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 entrambe le tabelle dati (e nel migliore dei casi anche tabelle con risultati corretti)? Potrebbe essere possibile farlo manualmente se non ci sono troppi gruppi e non è necessaria l'automazione. Potresti forse usare il componente aggiuntivo fuzzy_merge e utilizzare 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 Unisciti alle righe più vicine dovrebbe essere in grado di:
- Partecipa in base alla distanza
- Unisci i tavoli indietro, avanti e al più vicino (con opzioni di spareggio opzionali)
- Consenti raggruppamento
- Consenti l'uso della tolleranza
- Non dovrebbe essere necessario disporre di datatables ordinati

Re: Come faccio a unire le tabelle in base a una colonna completamente corrispondente e una corrispondenza più vicina?Perché non creare semplicemente una nuova colonna che arrotonda (s) l'ora di quella con 8 cifre e unirti a quella?
**Modifica** Non importa.Capisco subito perché.
È possibile ottenere un sottoinsieme del solo 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)
)
);
Re: Come faccio a 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 così tanto tempo perché ci sono fino a 24 gruppi/reattori e dovrai scorrere molti punti temporali. Creazione di sottoinsiemi? Come lo vedresti funzionare?
Re: Come faccio a 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 abbinati?
Creare il peso secco della colonna g/l e rinominare Time h in time h nei dati di riflettanza:

Concatena i dati sul peso a secco a quello:

Seleziona reattore e colonna Ora 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 delle formule o degli 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 probabilmente potresti copiare e incollare i valori del tempo di peso secco in una nuova colonna e creare una formula per calcolare la riga più vicina.

Questo è ciò che unisci le righe più vicine restituirebbe quando viene utilizzato Join:

Con Update non creerà tante colonne disordinate:

L'interfaccia utente degli strumenti sembra avere qualche problema sulla selezione delle tabelle... e l'utente deve assicurarsi che le tabelle corrette o selezionate o lo strumento si unirà automaticamente.