<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Scusa in anticipo per questa domanda per principianti:
Ho semplicemente una x e una y colonne. Con una sceneggiatura sto cercando di ottenere un tavolo con:
- il massimo y (nessun problema con questo),
- la media in un intervallo definito intorno al massimo,
- il valore x corrispondente al massimo y.
Probabilmente è uno script molto semplice, ma non ho potuto progredire!
Grazie per l'aiuto!
È perfetto, grazie mille Ian per la tua esaustiva risposta!
Qualcosa come questo avrebbe funzionato. Nota che 'LocMax ()' restituisce la posizione del primo massimo, e se ci sono più massimi dovrai fare più lavoro. Inoltre, se la finestra viene troncata, potresti voler regolare il calcolo della media, a seconda di cosa ti serve.
NamesDefaultToHere ( 1 ) ;
// Crea alcuni dati
dt = nuovatabella ( "X e Y" ,
newColumn ( "X" , Numerico , Continuo , Formula ( CasualeNormale ())) ,
newColumn ( "Y" , Numerico , Continuo , Formula ( CasualeNormale ())) ,
AddRows ( 100 )
) ;
// Ottieni i dati in vettori
xVals = Colonna ( dt , "X" ) << getAsMatrix ;
yVals = Colonna ( dt , "Y" ) << getAsMatrix ;
// Trova la posizione del più grande valore y
yMaxPos = LocMax ( yVals ) ;
// Ottieni i corrispondenti valori xey in questa posizione
yMax = yVals [ yMaxPos ] ;
xMax = xVals [ yMaxPos ] ;
// Definire la dimensione della finestra (costituita da un numero dispari di valori)
WinSize = 9 ;
// Calcola le posizioni dei bordi della finestra
sinistra = yMaxPos - ( WinSize - 1 ) / 2 ;
destra = yMaxPos + ( WinSize - 1 ) / 2 ;
// Assicurati che i bordi siano nel raggio d'azione
Se ( sinistra < 1 , sinistra = 1 ) ;
Se ( destra > nRow ( yVals ) , destra = nRow ( yVals )) ;
// Calcola il valore y medio nella finestra
yMean = Significare ( yVals [ sinistra :: destra ]) ;
// Stampa nella finestra del registro
Pulisci il registro () ;
Stampare ( yMaxPos , yMax , xMax , WinSize , sinistra , destra , yMean ) ;