Erstellen Sie mehrere neue Spalten basierend auf der FormelHallo JMP-Community
Ich habe 19.000 Spalten x 88 Zeilen mit kontinuierlichen Datenwerten aus dem Biomarkerausdruck.
Ich möchte für jeden Marker eine neue Spalte erstellen, die eine Formel enthält, die den Biomarker-Expressionswert vom Referenzwert abzieht.
Es müssen keine Zeilen ausgewählt werden, da ich alle Zeilen sowohl vom Biomarker als auch von der Referenz haben möchte.
Es scheint also ziemlich unkompliziert zu sein, aber ich habe Probleme, die Biomarker-Daten in die neue Spalte einzufügen (ich habe die Formel getestet, aber sie funktioniert auch nicht).
Der Code enthält keine Iterationen, da ich erstmal sehen möchte, ob er für eine einzelne Spalte funktioniert.

Automatisierung und SkriptingGrundlegende Datenanalyse und ModellierungDatenzugriffBetreff: Mehrere neue Spalten basierend auf einer Formel erstellenHallo @BioJmPCoder , kannst du den Code mit dem Symbol in den Post-Schaltflächen?
Betreff: Mehrere neue Spalten basierend auf einer Formel erstellenHier ist ein Beispiel, das alle neuen Spalten in einer Datentabelle erstellt, wobei die Beispieldatentabelle „Blutdruck“ verwendet wird. Das Skript verwendet zwei verschiedene Methoden zum Erstellen der neuen Spalten, um zu zeigen, dass unterschiedliche Methoden zum Erzielen derselben Ergebnisse verwendet werden können.
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 );
);Betreff: Mehrere neue Spalten basierend auf einer Formel erstellenHallo Jim,
Danke für den Hinweis. Ich versuche, alle Datenpunkte der Spalte zu normalisieren, indem ich sie von den Werten in Spalte 1 abziehe. Hier erhalte ich die Werte aus Spalte 3, aber ich erhalte den unten gezeigten Fehler. Vielleicht muss ich die Werte vektorisieren und sie nicht als Zeichenfolgen erstellen? bevor die Differenz ausgeführt werden kann?
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>
Betreff: Mehrere neue Spalten basierend auf einer Formel erstellenEs herrscht offenbar Verwirrung darüber, wie man Spalten in einer Datentabelle bearbeitet und mit JSL-Variablen arbeitet. Unten finden Sie ein Skript, das zwei Methoden verwendet, um eine Subtraktion der Werte in Spalte „BP 6M“ von den Werten in Spalte „BP 8M“ durchzuführen.
Methode 1 erstellt die Spalte Norm_BP 6M und Methode 2 erstellt die Spalte Norm2_BP 6M

Ich habe die JSL kommentiert, um Ihnen zu helfen, zu verstehen, was die beiden unterschiedlichen Ansätze bewirken.
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);