Come posso inizializzare i miei dati rispetto a un valore fisso?Ciao, vorrei implementare una formula per "inizializzare" alcuni dati nelle nostre tabelle. Nello specifico, vorrei sottrarre da tutti gli elementi in una colonna il valore della prima ripetizione dell'esecuzione del test (le informazioni sulla ripetizione sono contenute in un'altra colonna).
Allego la tabella su cui sto lavorando. La formula andrebbe integrata nella Colonna “X_35”. L’idea è di assegnare a ogni test il valore contenuto in X_22 ottenuto alla prima ripetizione (Colonna X_21) dell’analisi, filtrando però per condizione di test, in particolare mi interessa separare per altre colonne (ad esempio X_5, X_7 e X_8). Dopodiché applicherei la differenza per ogni riga, ottenendo gli offset per ogni punto dalla prima ripetizione. Vorrei trovare una soluzione utilizzando una formula per colonne se possibile, evitando di inserire i valori manualmente.
Sto lavorando con JMP 17
Grazie
Analisi e modellazione dei dati di baseEsplorazione e visualizzazione dei datiFinestreR: Come posso inizializzare i miei dati rispetto a un valore fisso?Benvenuti nella Community.
Sono un po' confuso su cosa stai chiedendo. Quello che vedo nei tuoi dati è che
La colonna X_31 definisce ciascuno degli 8 livelli dei dati, con ciascuno di questi raggruppamenti di righe per la colonna X_21 avente valori di sottoraggruppamento da 1 a 980.
Quello che penso tu voglia fare è, per una data riga, che non ha il valore X_21 pari a 1, esaminare i suoi valori per X_5, X_7 e X_8 e quindi trovare il valore iniziale per X, i valori corrispondenti per la colonna X_22 e sottrarre tale valore dal valore della riga corrente per la colonna X_22.
Non sono affatto sicuro della mia valutazione. Esaminando i dati, ci sono molte più combinazioni per le colonne X_5, X_7 e X_8 per ogni raggruppamento di valori iniziali X_31.
Ciò che stai attualmente mostrando nella tabella dati fornita, in cui i valori di X_35 vengono copiati dalla colonna X_22 se il valore di X_21 è uguale a 1, è una cosa facile da fare in JMP. Capire cosa vuoi per le altre righe è fonte di confusione. Se potessi fornire quale sarebbe il risultato previsto per la riga 7 e la riga 14 e i passaggi intrapresi per arrivare al risultato, sarebbe molto utile.
R: Come posso inizializzare i miei dati rispetto a un valore fisso?Ciao, grazie per la risposta rapida. Scusa per la mia spiegazione scadente, ma è più complesso da spiegare che, spero, da risolvere.
Proverò con una tabella schematica.
L’obiettivo è ottenere la colonna “Valore iniziale”, che ha, per ogni misura, il valore corrispondente alla prima ripetizione a seconda del tipo di test, qui identificato come A o B. Quindi, con una semplice differenza ottengo il valore spostato dal primo esperimento partendo da 0.
La formula che hai visto nell'altro messaggio è il mio tentativo di scrivere la colonna "Valore iniziale" utilizzando una condizione if con il numero di ripetizioni, il mio problema è cosa scrivere nell'altra condizione per ottenere lo stesso valore per un numero diverso di ripetizioni.
Grazie ancora
R: Come posso inizializzare i miei dati rispetto a un valore fisso?Una formula di colonna può essere utilizzata per creare ciò che desideri
As Constant( dt = Current Data Table() );
currentType = :Type;
theInitialValue = :Value[(dt << get rows where( :Type == CurrentType & :Repetition == 1 ))[1]];
:Value - theInitialValue;

Il metodo funziona, tuttavia, data una tabella di dati di oltre 55.000, la formula non è molto efficiente.
Un metodo più efficiente è quello di utilizzare uno script semplice per creare una nuova tabella che contenga solo i valori iniziali, quindi unire nuovamente la tabella alla tabella originale, dove la corrispondenza consentirà la replica dei valori iniziali in tutti i record corrispondenti.
names default to here(1);
dt=
New Table( "Example2",
Add Rows( 8 ),
New Column( "Type",
Character,
Set Values( {"A", "A", "A", "A", "B", "B", "B", "B"} )
),
New Column( "Repetition",
Numeric,
Set Values( [1, 2, 3, 4, 1, 2, 3, 4] )
),
New Column( "Value",
Numeric,
Set Values( [4, 10, 8, 7, 6, 9, 5, 10] )
)
);
// Create a table with the initial values
dt << select where(:Repetition == 1 );
initialDT = dt << subset( selected rows(1), columns({:Type,:Value}));
// Rename column Value to Initial Value
initialDT:Value << set name("Initial Value");
// Merge the values back to the original table
dt << Update(
With( initialDT ) ,
Match Columns( :Type = :Type )
);
// Create a column that contains the difference
dt << New Column( "Difference",
formula( :Value - :Initial Value )
);

R: Come posso inizializzare i miei dati rispetto a un valore fisso?Se si eseguono più spesso tali passaggi di normalizzazione, si potrebbe prendere in considerazione la Normalization GUI .
Oltre a sottrarre il "primo" valore, fornisce molte altre opzioni come "ultimo", N-1, "mediana", "media" (queste ultime tengono conto anche dell'esclusione di riga).
Puoi decidere se calcolare i valori oppure se preferisci una formula che aggiorna automaticamente i valori quando la colonna di input viene aggiornata.
R: Come posso inizializzare i miei dati rispetto a un valore fisso?Grazie!
Ora sto cercando di implementare il codice con tutte le variabili di cui ho bisogno, al momento tutto funziona.