Tengo un conjunto de datos en el que me gustaría calcular la media de las últimas 3 observaciones para cada fecha y tener ese valor en su propia columna y emparejado con la última fecha como se muestra a continuación.
Names Default To Here( 1 );
// Create an example data table
dt = New Table( "Date",
Add Rows( 30 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Set Values( [3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600,
3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200,
3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800] )
),
New Column( "Data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2,4,6,8,10,12,14,16,18,20,2,4,6,8,10,12,14,26,28,30,2,4,6,8,10,12,14,36,38,40] )
),
New Column( "Desired Result",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [.,.,.,.,.,.,.,.,.,18,.,.,.,.,.,.,.,.,.,28,.,.,.,.,.,.,.,.,.,38] )
),
);
Si bien puedo crear una tabla de resumen que calcule la media y luego insertar la media nuevamente en la tabla de datos original, estoy buscando una sugerencia para un método más elegante y menos intensivo en procesos.Se agradecería cualquier sugerencia sobre cómo lograr esto, ya sea como una fórmula de columna o mediante JSL (preferido).
Gracias por la sugerencia, especialmente una que fácilmente podría entender.Necesitaré profundizar más en la sugerencia de jthi, ya que la solución no es tan intuitiva para mí como la tuya.
También puedo abrir un poco mi solución, ya que las funciones de Col pueden ser bastante potentes. Eche un vistazo a la explicación cuando tenga tiempo:
- Use Col Max (Fila (),: Fecha) para obtener la última fila para cada fecha
- Verifique con la declaración if con Row () para la última fila para la fecha
- Utilice Media para calcular la media de las últimas tres filas para una fecha. Index (Row () - 2, Col Max (Row (),: Date) crea una matriz de números de fila. Y luego con: Datos [Índice] podemos obtener valores para esos números de fila
He adjuntado una tabla de datos en la que la fórmula se divide en partes.

Otra opción con fórmula:
If(Row() == Col Max(Row(), :Date),
Mean(:Data[Index(Row() - 2, Col Max(Row(), :Date))])
)
Aquí hay una forma de escribir la fórmula para hacer esto
If( :Date != :Date[Row() + 1] | Row() == N Rows( Current Data Table() ),
Mean( :Data[Row()], :Data[Row() - 1], :Data[Row() - 2] )
)