Créer plusieurs nouvelles colonnes basées sur une formuleBonjour la communauté JMP
J'ai 19 000 colonnes x 88 lignes contenant des données de valeurs de données continues provenant de l'expression de biomarqueurs.
Je souhaite créer une nouvelle colonne pour chaque marqueur contenant une formule soustrayant la valeur d'expression du biomarqueur - valeur de référence.
Il n’est pas nécessaire de sélectionner des lignes car je veux toutes les lignes du biomarqueur et de la référence.
Cela semble donc assez simple, mais j'ai du mal à insérer les données du biomarqueur dans la nouvelle colonne (j'ai testé la formule mais cela ne fonctionne pas non plus)
Le code ne contient aucune itération car je veux juste voir d'abord s'il fonctionne pour une seule colonne en premier

Automatisation et scriptsAnalyse et modélisation de données de baseAccès aux donnéesRé: Créer plusieurs nouvelles colonnes basées sur une formuleBonjour @BioJmPCoder , pouvez-vous coller le code en utilisant le icône dans les boutons de publication ?
Ré: Créer plusieurs nouvelles colonnes basées sur une formuleVoici un exemple qui crée toutes les nouvelles colonnes d'une table de données, en utilisant la table de données d'exemple de pression artérielle. Le script utilise 2 méthodes différentes pour créer les nouvelles colonnes afin de montrer que différentes méthodes peuvent être utilisées pour obtenir les mêmes résultats.
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 );
);Ré: Créer plusieurs nouvelles colonnes basées sur une formuleSalut Jim,
Merci pour votre contribution, j'essaie de normaliser tous les points de données de la colonne en soustrayant les valeurs de la colonne 1. Ici, j'obtiens les valeurs de la colonne 3, mais j'obtiens l'erreur affichée ci-dessous. Peut-être que je dois vectoriser les valeurs et les rendre non pas sous forme de chaînes ? avant que la différence puisse être exécutée ?
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>
Ré: Créer plusieurs nouvelles colonnes basées sur une formuleIl semble y avoir une certaine confusion sur la façon de manipuler les colonnes d'une table de données par rapport à l'utilisation de variables JSL. Vous trouverez ci-dessous un script qui utilise 2 méthodes pour créer une soustraction des valeurs de la colonne « BP 6M » avec les valeurs de la colonne « BP 8M »
La méthode 1 crée la colonne Norm_BP 6M et la méthode 2 crée la colonne Norm2_BP 6M

J'ai annoté le JSL dans l'espoir de vous aider à comprendre ce que font les 2 approches différentes
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);