Crea più nuove colonne in base alla formulaCiao comunità jmp
Ho 19000 colonne x 88 righe contenenti valori di dati continui derivanti dall'espressione di biomarcatori.
Voglio creare una nuova colonna per ogni marcatore contenente una formula che sottragga il valore di espressione del biomarcatore dal valore di riferimento.
Non c'è bisogno di selezionare alcuna riga poiché voglio tutte le righe sia del biomarcatore che del riferimento.
Sembra abbastanza semplice, ma ho difficoltà a inserire i dati del biomarcatore nella nuova colonna (ho testato la formula ma non funziona neanche questa)
Il codice non contiene iterazioni perché voglio solo vedere prima se funziona per una singola colonna

Automazione e scriptingAnalisi e modellazione dei dati di baseAccesso ai datiRe: Crea più nuove colonne in base alla formulaCiao @BioJmPCoder , puoi incollare il codice utilizzando icona nei pulsanti dei post?
Re: Crea più nuove colonne in base alla formulaEcco un esempio che crea tutte le nuove colonne in una tabella dati, utilizzando la tabella dati campione Blood Pressure. Lo script utilizza 2 metodi diversi per creare le nuove colonne per mostrare che metodi diversi possono essere utilizzati per ottenere gli stessi risultati.
names default to here(1);
// Open a sample data table to use for illustration
dt =
// Open Data Table: Blood Pressure.jmp
// → Data Table( "Blood Pressure" )
Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
// Get all of the numeric continuous column names
colNames = dt << get column names( string, continuous );
// Method 1
// Cycle through all Numeric, Continuous columns and create
// a new column with the values from the original column,
// using "set each value()"
For Each( {col}, colNames,
dt << New Column( col || " Dif1", numeric, continuous,
format( "Fixed Dec", 3, 0 ),
set each value( as column(col))
)
);
// Method 2
// Cycle through all Numeric, Continuous columns and create
// a new column with the values from the original column,
// pulling all of the values for a column into a matrix,
// and then creating a new column and populating the new
// column with the values from the matrix
For Each( {col}, colNames,
theValues = column( col ) << get values;
dt << New Column( col || " Dif2", numeric, continuous,
format( "Fixed Dec", 3, 0 )
);
column( dt, nCols(dt) ) << set values( theValues );
);Re: Crea più nuove colonne in base alla formulaCiao Jim,
Grazie per il contributo, sto cercando di normalizzare tutti i punti dati della colonna sottraendo ai valori nella colonna 1. Qui ottengo i valori dalla colonna 3, ma ottengo l'errore mostrato di seguito. Forse devo vettorizzare i valori e renderli non come stringhe? prima che la differenza possa essere eseguita?
dt = Current data table();
col_names = dt << get column names(string, continuous);
markerCount = Column(3);
normCount = markerCount - Column(1);
dt << New Column( "Norm_" || col_names[3],
numeric,
continuous,
format( "Fixed Dec", 3, 2 ),
set each value( as column(normCount))
);
//set each value( as column(Column(3)) - column(Column(1)))<BR /><BR /><BR /><BR /><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 381px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="image.png" style="width: 381px;"><span class="lia-inline-image-display-wrapper" image-alt="image.png" style="width: 381px;"><img src="https://us.v-cdn.net/6038925/uploads/images/71119i06611C84D006971E/image.png" role="button" title="image.png" alt="image.png" /></span></SPAN></SPAN>
Re: Crea più nuove colonne in base alla formulaSembra esserci un po' di confusione su come manipolare le colonne in una tabella dati rispetto al lavorare con variabili JSL. Di seguito è riportato uno script che utilizza 2 metodi per creare una sottrazione dei valori nella colonna "BP 6M" con i valori nella colonna "BP 8M"
Il metodo 1 crea la colonna Norm_BP 6M e il metodo 2 crea la colonna Norm2_BP 6M

Ho annotato il JSL nella speranza di aiutarti a capire cosa stanno facendo i 2 diversi approcci
names default to here(1);
// Open a sample data table to use for illustration
dt =
// Open Data Table: Blood Pressure.jmp
// → Data Table( "Blood Pressure" )
Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
// The data table has the following columns in it
// Subject, Dosec BP 8M, BP 12M, BP 6M, BP 8W, BP 12W, BP 6W,
// BP 8F, BP 12F, BP 6F, Norm_BP 6M
// Get all of the numeric continuous column names
col_Names = dt << get column names( string, continuous );
// Get Column Names returns a JMP List of column names
// of the columns that have a Modeling Type of Continuous
// {"BP 8M", "BP 12M", "BP 6M", "BP 8W", "BP 12W", "BP 6W",
// "BP 8F", "BP 12F", "BP 6F"}
// Note that the first 2 column in the data table, Subject and Dose
// are not in the list
// Note: Specifying
// Column( 1 )
// references the 1st column in the data table, which is Subject
// Specifying
// Column( col_Names[1] )
// references the 1st column in the col_Names List, which is BP 8M
// Method 1
// Create the new column. Set Each Value loops through each
// row in the data table and applies the specified formula
// which is to subtract the value in the 1st column in the
// col_Names list from the value in the 3rd column in the
// col_Names list
dt << New Column( "Norm_" || col_names[3],
numeric,
continuous,
Format( "Fixed Dec", 3, 2 ),
set each value( As Column( col_Names[3] ) - As Column( col_Names[1] ) )
);
// Method 2
// Perform the same subtraction, however do it by pulling all of the
// values from each of the 2 target columns into 2 matrices and then
// use matrix math to do the subtraction into an additional matrix
// and then take those values and put them into the new column
// Create the new column with no values
dt << New Column( "Norm2_" || col_names[3],
numeric,
continuous,
Format( "Fixed Dec", 3, 2 )
);
// Pull the data from the 2 columns in the data table
matCola = column( col_Names[1]) << get values;
matColb = column( col_Names[3]) << get values;
// Subtract the values in matCola from matColb
matResults = matColb - matCola;
// Put the results into the new column
column( "Norm2_" || col_names[3] ) << set values( matResults);