<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Lo siento de antemano por esta pregunta de novato:
Simplemente tengo una x y una y columnas. Con un script estoy tratando de obtener una tabla con:
- el máximo y (no hay problema con esto),
- el promedio en un rango definido alrededor del máximo,
- el valor de x correspondiente al máximo y.
Probablemente es un script muy fácil, ¡pero no he podido avanzar en él!
¡Gracias por tu ayuda!
Eso es perfecto, muchas gracias Ian por tu exhaustiva respuesta.
Algo como esto haría. Pero tenga en cuenta que 'LocMax ()' devuelve la posición del primer máximo, y si hay varios máximos, tendrá que hacer más trabajo. Además, si la ventana está truncada, es posible que desee ajustar el cálculo de la media, según lo que necesite.
NombresDefaultToHere ( 1 ) ;
// hacer algunos datos
dt = Tabla nueva ( "X y Y" ,
Nueva Columna ( "X" , Numérico , Continuo , Fórmula ( RandomNormal ())) ,
Nueva Columna ( "Y" , Numérico , Continuo , Fórmula ( RandomNormal ())) ,
AddRows ( 100 )
) ;
// Obtener los datos en vectores
xvals = Columna ( dt , "X" ) << getAsMatrix ;
yVales = Columna ( dt , "y" ) << getAsMatrix ;
// Encuentra la posición del mayor valor de y
yMaxPos = LocMax ( yVales ) ;
// Obtenga los valores x e y correspondientes en esta posición
yMax = yVales El yMaxPos ] ;
xMax = xvals El yMaxPos ] ;
// Definir el tamaño de la ventana (que consiste en un número impar de valores)
winSize = 9 ;
// Calcula las posiciones de los bordes de la ventana.
izquierda = yMaxPos - ( winSize - 1 ) / 2 ;
Correcto = yMaxPos + ( winSize - 1 ) / 2 ;
// Asegúrate de que los bordes estén dentro del rango
Si ( izquierda < 1 , izquierda = 1 ) ;
Si ( Correcto > NRow ( yVales ) , Correcto = NRow ( yVales )) ;
// Calcular el valor promedio de y en la ventana
y significa = Media ( yVales El izquierda :: Correcto ]) ;
// Imprimir en la ventana de registro
Borrar registro () ;
Impresión ( yMaxPos , yMax , xMax , winSize , izquierda , Correcto , y significa ) ;