Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xHo una tabella dati con le colonne "Tempo" (numerico, continuo, formattato in 12 ore h:m:s) e "Nome" (carattere, semplicemente un elenco degli esperimenti a cui è associato ciascun punto temporale). Quando creo un grafico utilizzando altre colonne non menzionate qui come asse Y e "Tempo" come asse X, sorge il problema che ogni grafico tra le variabili del gruppo x viene spostato poiché la scala dell'asse x rimane la stessa tra le variabili del gruppo x (Figura 1).

Figura 1. Ogni variabile di raggruppamento x è una variabile di colonna "Nome" con "Nome" anche come sovrapposizione.
Il mio pensiero è di scrivere una sceneggiatura per:
1. Crea una nuova colonna
2. Codificare la nuova colonna con una formula che converta la colonna "Tempo" in un tempo in secondi, iniziando da "0" e contando con un intervallo specificato (2 secondi in questo caso), reimpostando a 0 non appena i valori della colonna "Nome".
Le mie domande principali sono:
1. È possibile?
2. Esiste un modo più semplice per farlo senza creare una nuova colonna?
Attualmente su JMP 17.2.0 su Windows 10.
Grazie!
Esplorazione e visualizzazione dei datiRe: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xVedi se questo fa al caso tuo.
dt << New Column( "ElapsedTime", numeric, continuous, Formula( :LocalTime - Col Min( :Local Time, :Name ) ) );
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xGrazie per la risposta!
Sfortunatamente, ciò restituisce la colonna "Tempo trascorso" visibile nella figura sottostante.

Ho provato il seguente codice, che ha restituito la colonna "Tempo (s)" anche nella figura sopra. Sembra che esegua la funzione "imposta iniziale a zero", ma non converta nient'altro.
Names Default To Here(1); // Ensure scope is local for column references
dt = Current Data Table(); // Reference to the active data table
// Add a new numeric column "Time (s)" with the specified formula
dt << New Column( "Time (s)",
Numeric, Continuous, Format( "Best", 12 ), // numeric format (optional)
Formula(
If(
Row() == 1,
// Case 1: First row of the table -> start at 0 seconds
0,
:Name("Name") != Lag( :Name("Name") ),
// Case 2: Identifier changed from the previous row -> new run, reset time to 0
0,
// Case 3: Otherwise (same run as previous row) -> accumulate time difference
Lag( :Name("Time (s)") ) + ( :LocalTime - Lag( :LocalTime ) )
)
)
);
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xPotrebbe esserci qualcosa di inaspettato nella colonna :LocalTime. Ho provato la mia formula su una tabella inventata e ha funzionato come previsto. Come è formattata la colonna :LocalTime?

Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xHo creato una tabella dati di esempio

E poi ho eseguito il seguente JSL
Names Default To Here(1); // Ensure scope is local for column references
dt = Current Data Table(); // Reference to the active data table
// Add a new numeric column "Time (s)" with the specified formula
dt << New Column( "Time (s)",
Numeric, Continuous, Format( "Best", 12 ), // numeric format (optional)
Formula(
If(
Row() == 1,
// Case 1: First row of the table -> start at 0 seconds
0,
:Name("Name") != Lag( :Name("Name") ),
// Case 2: Identifier changed from the previous row -> new run, reset time to 0
0,
// Case 3: Otherwise (same run as previous row) -> accumulate time difference
Lag( :Name("Time (s)") ) + ( :LocalTime - Lag( :LocalTime ) )
)
)
)
dt << New Column( "ElapsedTime", numeric, continuous, Formula( :LocalTime - Col Min( :Local Time, :Name ) ) );
Un ha ottenuto il seguente output

Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xOk, non preoccuparti, il codice che ho pubblicato funzionava davvero! Avevo scritto male il nome della mia colonna.:confounded_face:
L'unica domanda che rimane è: esiste un modo più semplice per farlo senza creare una nuova colonna?
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xRichiede una nuova colonna. Non deve essere necessariamente una colonna persistente, il che significa che potrebbe essere una colonna che esiste solo finché il grafico è presente.
Graph Builder(
Transform Column(
"Time (s)",
Formula( :LocalTime - Col Min( :LocalTime, :Name ) )
),
Show Control Panel( 0 ),
Variables( X( :"Time (s)"n ), Y( :Y Column ), Group X( :Name ) ),
Elements( Smoother( X, Y, Legend( 8 ) ) )
);
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xPuoi sempre utilizzare una colonna di trasformazione (virtuale) quando esegui il Generatore di Grafici. In questo modo non dovrai avere una colonna fisica nella tua tabella dati.
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xÈ perfetto. Grazie a te e a @txnelson per le ottime soluzioni!
Re: Conversione del tempo in intervalli di tempo e reimpostazione in base ai valori della seconda colonna per evitare lo scostamento dell'asse xNota a margine: lo standard in JMP prevede di inserire le unità di misura nella proprietà della colonna "Unità". Nel tuo caso, la differenza consisterebbe nel fatto che il nome effettivo della colonna sarebbe "Tempo", tuttavia, per impostazione predefinita, il valore "Unità" viene visualizzato tra parentesi, modificando il valore visualizzato in "Tempo (s)".