Sostituzione dei valori della matriceCIAO! Sto cercando di inserire tutti i dati delle mie colonne in una matrice 8 per 12 in ordine (riempiendo prima le colonne verso il basso). Ci sono solo 72 valori nella mia colonna, quindi voglio che i valori rimanenti che non sono riempiti siano 0.Sto riscontrando molti problemi nel tentativo di far funzionare il codice seguente. Gradirei qualsiasi aiuto!
dt = Open("Example.jmp");<BR />Rows = nrows(dt);
names= dt << Get Column Names (String);
Table =[];
Table = J(8,12,0);
For(i=1, i <= ncol(dt),i++,
data = column(dt, names[i]) <<GETVALUES></GETVALUES>Ri: Sostituzione dei valori della matriceGrazie! funziona perfettamenteRi: Sostituzione dei valori della matriceNon ho il tuo esempio, quindi ho dovuto utilizzare una delle tabelle di dati di esempio JMP. Sostituisci quelle righe per la tabella dati iniziale con le tue.
Names Default to Here( 1 );
// use sample data to illustrate
dt = Open( "$SAMPLE_DATA/Fitness.jmp" );
// delete non-numeric data columns
dt << Delete Columns( { :Name, :Sex } );
// make empty container
table = Associative Array();
// get each data column and create (key, value) pair (key = col name, value = 8x12 matrix)
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
);
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Close( dt, No Save );
dir = Get Default Directory();
content = table << Get Contents;
For( t = 1, t <= N Items( content ), t++,
dt = As Table( content[t][2] );
file path = dir || content[t][1] || ".CSV";
dt << Save( file path );
Close( dt, No Save );
text = Load Text File( file path );
eol = Contains( text, "\!n" );
text = Munger( text, 1, eol - 1, content[t][1] );
Save Text File( file path, text );
);Ri: Sostituzione dei valori della matriceGrazie mille per il vostro aiuto. Lo apprezzo. Sono riuscito a salvare il file utilizzando il tuo codice, ma attualmente la prima riga del file CSV è la prima riga di dati, non esiste un nome di colonna. Vorrei che la prima cella avesse il nome della colonna e subito sotto i dati 8 per 12.Ri: Sostituzione dei valori della matricePer favore sii paziente. Ho difficoltà a salvare il file CSV per qualche motivo sconosciuto. Sto lavorando con il supporto tecnico.
Mentre aspetto la risposta, voglio essere sicuro che tu voglia sostituire la prima riga del file CSV (intestazioni delle colonne di dati originali) solo con il nome della colonna di dati originale.
Ri: Sostituzione dei valori della matriceHa funzionato!! Tuttavia, in realtà volevo mantenere i nomi delle colonne (o in questo caso content[t][1]) nel file CSV come prima riga. Al momento non viene visualizzato. Sai come posso mantenerlo nella prima cella del file CSV?Ri: Sostituzione dei valori della matriceOk, questa versione aggiornata dello script dovrebbe fare al caso tuo:
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
);
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
content = table << Get Contents;
For( t = 1, t <= N Items( content ), t++,
dt = As Table( content[t][2] );
Close( dt, Save( content[t][1] || ".CSV" ) );
);
Sfortunatamente non so come eliminare la prima riga con i nomi delle intestazioni nei file CSV. Forse qualcun altro lo sa. Potremmo immediatamente rileggere il file come testo, eliminare la prima riga e salvarlo di nuovo.
Ri: Sostituzione dei valori della matriceHo bisogno del layout per la mia configurazione e un file CSV è l'unico tipo di file letto dal dispositivoRi: Sostituzione dei valori della matriceVedere Aiuto > Indice di script. Fare clic sul pulsante a discesa e selezionare Funzioni. Cerca la funzione As Table().
Ri: Sostituzione dei valori della matriceHo il sospetto che, come nuovo utente JMP, la tua mentalità potrebbe essere ancora quella di un utente di fogli di calcolo. Non conosco la destinazione del file CSV, ma puoi fare molto in JMP utilizzando un layout di tabella alto.
Perché hai bisogno del layout 8x12? Perché è necessario esportare le matrici come file CSV?
Potremmo essere in grado di aiutarti a utilizzare JMP a tuo vantaggio se sapessimo dove stava andando questa analisi.
Ri: Sostituzione dei valori della matricePer favore, dai un'occhiata questo post . Potresti trovarlo utile nel tuo lavoro con esperimenti su piastre.
Ri: Sostituzione dei valori della matricePotrei essere un po' ridondante, ma ecco un modo alternativo di gestirlo dato il requisito dell'output in un file CSV.Utilizza la manipolazione della tabella dati per ottenere i dati nel formato corretto, quindi scrive la tabella dati in un file CSV
Names Default To Here( 1 );
// Create some sample data
dt = New Table( "Example",
add rows( 72 ),
New Column( "c1", formula( Random Uniform( 1, 500 ) ) ),
New Column( "c2", formula( Random Uniform( 1, 500 ) ) ),
New Column( "c3", formula( Random Uniform( 1, 500 ) ) )
);
dt << run formulas;
dt:c1 << delete property( "formula" );
dt:c2 << delete property( "formula" );
dt:c3 << delete property( "formula" );
// Get the list of columns
colNamesList = dt << get column names( string, numeric );
// Loop across the columns and process them
For( i = 1, i <= N Cols( dt ), i++,
// Create a new table will only the single column
dtTemp = dt << subset(invisible, selected rows( 0 ), columns( Column( colNamesList[i] ) ) );
// If there are not 96 rows, add them
If( N Rows( dtTemp ) < 96,
rowCount = N Rows( dt );
dtTemp << add rows( 96 - rowCount );
For( k = rowCount + 1, K <= 96, k++,
Column( dtTemp, colNamesList[i] )[k] = 0
);
);
// Create a sequence column to allow for proper splitting of the data
dtTemp << New Column( "sequence",
formula(
x = Mod( Row(), 8 );
If( x == 0, x = 8 );
x;
)
);
dtTemp << run formulas;
// Split the data into 8 columns.....if this should be 12 just change the sequence formula above
dtSplit = dtTemp << Split(invisible, Split By( :sequence ), Split( Column( dtTemp, colNamesList[i] ) ), Sort by Column Property );
dtSplit << run formulas;
// Close the un needed temporary data table
Close( dtTemp, nosave );
// Change the output preferences to get rid of headers
current_pref = Char( Arg( Parse( (Char( Get Preferences( Export settings ) )) ), 1 ) );
// Set prefs (comma delimited, no headers)
Pref( Export Settings( End Of Field( Comma ), Export Table Headers( 0 ) ) );
// Save csv file
dtSplit << save( "$TEMP\" || colNamesList[i] || ".csv" );
//Restore oribinal prefs
Eval( Parse( "pref(" || current_pref || ")" ) );
// Close the un necessary table
Close( dtSplit, nosave );
);
Ri: Sostituzione dei valori della matriceGrazie per il vostro aiuto e interesse. Il metodo dell'array associativo di Mark Bailey ha funzionato. Ora sto cercando di capire come inserire l'array associativo in una tabella dati in modo da poterlo esportare come file CSV.Ri: Sostituzione dei valori della matriceQuindi, una volta inseriti i dati nelle matrici, come spostarli nelle posizioni permanenti?Ri: Sostituzione dei valori della matriceMi scuso per la confusione. Sto cercando di memorizzare i dati di ciascuna colonna in un formato 8 x 12 (che è la dimensione di una piastra per microtitolazione con 96 pozzetti), al fine di memorizzare i risultati dei miei esperimenti in correlazione alla sua posizione sulla piastra . Ogni colonna rappresenta un esperimento diverso.Ri: Sostituzione dei valori della matriceHo seguito questa discussione dall'inizio.Sembra essersi evoluto in un esercizio di scripting, senza svelare quale sia il vero obiettivo finale. @Mark_Bailey ha fornito una bella soluzione con l'uso di un Associative Array, ma quello che vedo mancare è qual è il vero motivo per creare queste matrici?Se questo fosse noto, potrebbe esserci una soluzione più semplice.
Ri: Sostituzione dei valori della matriceI nomi delle colonne vengono memorizzati nell'array associativo. Sono le chiavi. Puoi verificare questa affermazione aggiungendo questo allo script:
Show( table << Get Keys );
Ti suggerisco di consultare Aiuto > Libri > Guida allo scripting, quindi cercare "array associativo". Puoi scorrere le coppie ed eseguire facilmente molte altre attività. Gli esempi nella guida sono validi, ma torna qui se hai domande.
Ri: Sostituzione dei valori della matriceGrazie!! Funziona bene Tuttavia, il nome della colonna non viene archiviato. Sai come potrei risolverlo?Ri: Sostituzione dei valori della matriceLe colonne di dati sono per i risultati di una piastra per microtitolazione?
Vuoi rimodellare i dati in ciascuna colonna in una tabella 8x12. Il tuo script manterrà la tabella solo per l'ultima colonna. Ecco uno script che elabora ogni colonna di dati e memorizza il risultato della tabella con il nome della colonna in un array associativo.
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
data[Loc(Is Missing( data ))] = 0;
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Show( table << Get Contents );
Presumo che tu abbia almeno 96 righe. Se ce ne sono di più, sono perduti. Se ce ne sono meno, allora l'assegnazione di 0 dovrebbe essere modificata in una concatenazione che si riempie con 0. Questa versione pad invece:
Names Default to Here( 1 );
dt = Open( "Example.jmp" );
table = Associative Array();
For( c = 1, c <= N Col( dt ), c++,
data = Column( dt, c ) << Get As Matrix;
If( N Row( data ) < 96,
data |/= J( 96 - N Row( data ), 1, 0 );
)
table[Column( dt, c ) << Get Name] = Transpose( Shape( data, 12, 8 ) );
);
Show( table << Get Contents );
Ri: Sostituzione dei valori della matriceGrazie per l'aiuto! Posso utilizzare la funzione Ottieni come matrice per inserire i dati in una matrice con specifiche? Ho bisogno che i dati della colonna vadano in una matrice 8 per 12.Ri: Sostituzione dei valori della matricegrazie per la risposta Jim! la tabella dati ha 5 colonne in questo momento, ma può cambiare a seconda dell'input dell'utente. Fondamentalmente sto cercando di inserire una colonna di dati in una matrice con 12 colonne e 8 righe.
(a - 1) * b + b non sembra funzionare per me, immagino perché per i dati della prima colonna saranno sempre dati[0]. Sai cosa sta andando storto?Ri: Sostituzione dei valori della matriceJim offre un'ottima soluzione ma non sono sicuro di cosa vuoi fare, quindi offro un altro modo per illustrare un altro punto.
Names Default to Here( 1 );
// open example
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
// make illustrative example with colums of different sizes (missing values)
dt2 = dt1 << Split(
Split By( :age ),
Split( :weight ),
Remaining Columns( Drop All ),
Sort by Column Property
);
Close( dt1, No Save );
// input data table as matrix
mat = dt2 << Get As Matrix;
// replace missing values with zero
mat[Loc(Is Missing(mat))] = 0;
// see result
Show( mat );
Spero che sia d'aiuto.
Ri: Sostituzione dei valori della matriceNon sono davvero sicuro di capire cosa stai cercando di fare.Ma di seguito è riportato uno script che riempirà gli zeri dopo che la matrice chiamata dati avrà esaurito i valori
dt = Open( "Example.jmp" );
Rows = N Rows( dt );
names = dt << Get Column Names( String );
Table = [];
Table = J( 8, 12, 0 );
For( i = 1, i <= N Col( dt ), i++,
data = Column( dt, names[i] ) << getValues;
For( a = 1, a <= 12, a++,
For( b = 1, b <= 8, b++,
// I believe that (a - 1 ) * b + b will be equal to the
// row number of the data matrix you read in. Once it's
// value is greater than the number of rows in the dt data
// table, it will enter zeros.
If( (a - 1) * b + b <= Rows,
Table[a, b] = data[(a - 1) * b + b],
Table[a, b] = 0
)
)
);
);
Print( Table );
Sono confuso su cosa stai facendo con il ciclo For() esterno, passando da una colonna all'altra.Quante colonne ci sono nella tabella dati Esempio?