eseguire la valutazione del calcolo nell'array associativoCiao,
Sto cercando di ottenere una funzione per restituire un calcolo della deviazione standard memorizzato all'interno di un array associativo, il mio codice restituirà solo l'espressione dell'array associativo e non il calcolo.per favore dimmi cosa c'è che non va nel mio codice.
cvf = Massimo ( replist ) ;// il mio cvf nel file è 8
CV = matrice associativa () ;
CV [ 6 ] = matrice associativa ({( Sviluppo standard ( 5 , 6 , 7 , 8 , 9 , 10 ))}) ;
CV [ 8 ] = matrice associativa ({( Sviluppo standard ( 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ))}) ;
CV [ 12 ] = matrice associativa ({( Sviluppo standard ( 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ))}) ;
CVC = Funzione ( { rif } , Locale ({ CV = matrice associativa ({ cvf , Valutazione ( cvf )} )} , CV << ottenere valori ( cvf )) ; CV [ rif ]) ; ) ;
UN = CVC ( cvf ) ;
eval ( eval espr ( UN )) ;
Mostra(a);
questo è l'output che ottengo:
a = Array associativo({{Std Dev( 5, 6, 7, 8, 9, 10, 11, 12 ), 1}}, 0);
questo è l'output che voglio: a= 2.5
Ri: eseguire la valutazione del calcolo nell'array associativoSummarize(age grp) è un elenco di due liste e non è compatibile con l'array associativo(age grp). Anche avg e sd sono in un unico elenco che non è compatibile per i riferimenti incrociati con Summary(age grp). Il codice seguente allinea correttamente gli elenchi (non carino)
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( sum = By( :age),sex grp= By (:sex), avg = Mean( :height ), sd = Std Dev( :height ) );
age grp = Associative Array( :age ) << Get Keys;
sex grp = Associative Array( :sex ) << Get Keys;
dt << New Column( "CV" ) << New Column( "AVG" ) << New Column( "SD" );
For( g = 1, g <= nitems(age grp), g++,
For(i =1, i<=nitems(sex grp), i++,
rows = dt << get rows where( :age == age grp[g] & :sex == sex grp[i] );
if( i==1,
:AVG[rows] = avg[ g*2-1 ];
:SD[rows] = sd[ g*2-1 ];
:CV[rows] = 100 * avg[ g*2-1 ] / sd[ g*2-1 ];
,
:AVG[rows] = avg[ g*i ];
:SD[rows] = sd[ g*i ];
:CV[rows] = 100 * avg[ g*i ] / sd[ g*i ];
)));
Ri: eseguire la valutazione del calcolo nell'array associativoGrazie, funziona
Ri: eseguire la valutazione del calcolo nell'array associativoNon sono sicuro di quando sia apparso, ma per tua informazione, ho appena notato che nella mia versione di JMP (13), "CV" è una delle statistiche fornite da "Tabelle> Riepilogo". Quindi la colonna della formula non è necessaria.
Ri: eseguire la valutazione del calcolo nell'array associativoMi scuso per non aver notato che hai due variabili di raggruppamento. Questo script modificato ti mostrerà come funziona.
Names Default to Here( 1 );
// Open example of a data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Estimate group statistics and group identities
Summarize( age sex grp = By( :age, :sex ), avg = Mean( :height ), sd = Std Dev( :height ) );
// Make a new columns for group result
dt << New Column( "Avg" ) << New Column( "SD" ) << New Column( "CV" );
// Iterate over groups
For( g = 1, g <= N Items( age grp ), g++,
// Convert :age level to match data type of identity
rows = dt << Get Rows Where( Char( :age ) == age sex grp[1][g] & :sex == age sex grp[2][g] );
:Avg[rows] = avg[g];
:SD[rows] =sd[g];
:CV[rows] = 100 * sd[g] / avg[g];
);
Non penso che un array associativo sia il modo più efficiente per identificare i gruppi. La funzione Summarize() stima contemporaneamente le statistiche del gruppo e identifica il gruppo associato utilizzando due elenchi paralleli di livelli di gruppo. L'unico svantaggio, a mio parere, è che i livelli di raggruppamento sono sempre stringhe di caratteri anche se i livelli originali sono numerici, come :età livelli in questo caso. Quindi ho dovuto convertire il livello :age per il confronto utilizzato per ottenere i numeri di riga di destinazione.
Ora hai due approcci, inclusa la soluzione di Ian usando il comando Summary\.
Ri: eseguire la valutazione del calcolo nell'array associativoPotresti provare a vedere se questo è più efficiente (cosa che potrei aspettarmi):
Names Default To Here( 1 );
// Example table
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Edit to taste . . .
var = Column(dt, "height");
byVars = {Column(dt, "sex"), Column(dt, "age")};
// Use a summary table with formula column
dt2 = dt << Summary(Group(byVars), Mean(var), Std Dev(var));
Column(dt2, 4) << setName("Mean");
Column(dt2, 5) << setName("StdDev");
dt2 << New Column( "CV", Numeric, "Continuous", Format( "Percent", 12, 3 ), Formula(:StdDev/:Mean));
Se hai bisogno dei valori CV nella tabella originale, usa 'Tabelle> Unisci'.
Ri: eseguire la valutazione del calcolo nell'array associativoCiao Mark ,
Uso il tuo esempio e sono in grado di ottenere correttamente il numero di riga, ma la media e la deviazione standard non sono corrette. E la mia tabella supera le 10.000 righe, il calcolo è un po' lento. Mi diresti per favore dove ho sbagliato? Grazie.
I nomi predefiniti sono qui ( 1 ) ;
dt = Aprire ( "$SAMPLE_DATA/Classe grande.jmp" ) ;
Riassumere ( età gr = Di ( : età ) , sesso grp = Di ( : sesso ) , media = Significare ( : altezza ) , SD = Sviluppo standard ( : altezza ) ) ;
età gr = matrice associativa ( : età ) << Ottieni le chiavi ;
sesso grp = matrice associativa ( : sesso ) << Ottieni le chiavi ;
dt << Nuova Colonna ( "CV" ) ;
Per ( G = 1 , G <= articoli ( età gr ) , G ++,
per ( io = 1 , io <= articoli ( sesso grp ) , io ++,
righe = dt << ottenere righe dove ( : età == età gr [ G ] & : sesso == sesso grp [ io ]) ;
: CV [ righe ] = 100 * SD [ io ] / media [ io ] ;
)) ;
Ri: eseguire la valutazione del calcolo nell'array associativoGrazie, è quello che sto cercando. Grazie.
Shu
Ri: eseguire la valutazione del calcolo nell'array associativoProva questo esempio:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Summarize( age grp = By( :age ), avg = Mean( :height ), sd = Std Dev( :height ) );
age grp = Associative Array( :age ) << Get Keys;
dt << New Column( "CV" );
For( g = 1, g <= N Items( age grp ), g++,
rows = dt << Get Rows Where( :age == age grp[g] )
:CV[rows] = 100 * sd[g] / avg[g];
);
Ri: eseguire la valutazione del calcolo nell'array associativoci sono tre colonne in una tabella di dati e una indicherà il numero di replica, l'altra avrà un'uscita del segnale per la replica e l'ultima avrà il dataID. e ho bisogno di calcolare la deviazione standard per tutti i dataID. tutti i dati avranno solo due repliche, tranne un tipo specifico denominato "Titer" e, a seconda di dove vengono generati i dati, il tipo di dati "Titer" può avere 6, 8 o 12 repliche. quindi, creo questi tre casi come un array e li collego alla colonna di replica.
il mio codice e restituisco la formula al calcolo della devaizione standard, tuttavia, quando li inserisco in una nuova colonna per il calcolo del CV, non fa nulla.
l'altra opzione che posso pensare è utilizzare la piattaforma Tabulate per ottenere la devazione standard e inserirli in un array e assegnarli nuovamente alla nuova colonna. Qualche suggerimento?
Ri: eseguire la valutazione del calcolo nell'array associativoRicominciamo.
- Cosa stai cercando di fare?
- Come sono i tuoi dati?
- Come è organizzato?
- Quali sono i risultati di cui hai bisogno?
- Cosa vuoi fare con i risultati?
Non mi è chiaro che è necessario utilizzare un array associativo.
Ri: eseguire la valutazione del calcolo nell'array associativoCapisco il mio problema, ma ho un nuovo problema.
il mio array associativo è una formula e devo recuperare la chiave per eseguire il calcolo.
il mio codice restituirà a, che è la formula su come calcolare la deviazione standard. ma quando inserisco la formula in una nuova formula, la nuova formula non esegue il calcolo.
UN = CVC ( cvf ) << prendi le chiavi ( cvf ) ;
spettacolo ( UN ) ;// questa è la formula con a:
{Std Dev(:INSTRUMENT_SIGNAL[Row() + 8], :INSTRUMENT_SIGNAL[Row() + 1], :INSTRUMENT_SIGNAL[Row() + 2], :INSTRUMENT_SIGNAL[Row() + 3], :INSTRUMENT_SIGNAL[Row() + 4], :INSTRUMENT_SIGNAL[Riga() + 5], :INSTRUMENT_SIGNAL[Riga() + 6], :INSTRUMENT_SIGNAL[Riga() + 7])};
ma una volta inserito a nella nuova formula qui sotto: a farebbe il calcolo. Per favore aiuto!
C ol 2 << formula stabilita ( Se ( : RUNSAMPLEKIND == "TITERC.NEG" , ( UN / : Segnale medio ) * 100 ) ,
Se ( : RUNSAMPLEKIND [ Riga ()] == : RUNSAMPLEKIND [ Riga () + 1 ] ,
Se ( : RAPPRESENTANTE [ Riga ()] != 2 , ( Sviluppo standard ( : STRUMENTO_SEGNALE [ Riga () + 1 ] , : STRUMENTO_SEGNALE [ Riga ()] ) / : Segnale medio ) * 100 ) ) ) ;