¿Cómo cambiar una columna de fórmula en una variable?Estoy usando una primera columna de fórmula como resultado provisional, para recalcular el Resultado concluyente con una segunda columna formal. La segunda columna está utilizando el resultado de la primera columna de fórmula.
¿Hay alguna manera fácil de evitar la primera columna de fórmula, creando un varaibele por ejemplo? Mi JSL Knolodge es muy básico.
Gracias por adelantado.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Gracias por su respuesta.
¿Podría mostrarme cómo combinar el ¿Función de fila de cuantil () con la versión de matriz?
Re: ¿Cómo cambiar una columna de fórmula en una variable?Como dijiste, la fórmula de respuesta funciona muy bien para obtener los valores de NewDataCorr.
Actualicé su archivo con la nueva columna: NewDataCorr 2. En esta columna se ha usado la fórmula de la declaración If. En lugar de utilizar los valores de la columna DataTmp, los expresé con la fórmula DataTmp:
Si (: P1 == 0 &: P2
,
: DataRaw
)
En este caso me libré de la columna DataTmp. ¿Cuál es su opinión sobre esta solución?
Re: ¿Cómo cambiar una columna de fórmula en una variable?La solución de Cameron debería ser bastante rápida, incluso en filas de 100K +.
Otra cosa, con la función col quantile () se evalúa para cada fila en la fórmula de la tabla de datos, y eso también ralentizaría un poco las cosas. En la versión de matriz, solo se evalúa una vez.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Subí el archivo example.jmp. Mi pregunta específica es, w hat es la mejor manera de evitar la creación de las columnas: DataTmp y: FlyerTmp para obtener las columnas: DataCorr con la ayuda de las columnas: P1,: P2 y: DataRaw?
De acuerdo con los usuarios de JSL, es mejor calcular estas columnas con la ayuda de listas o marcas, especialmente si los conjuntos de datos son grandes.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Gracias por su sugerencia JSL. Tengo curiosidad por probar el guión. En este momento no puedo verificar esto (no tengo acceso a JMP).
Me pregunto cómo se tratan los puntos de datos desde la columna de origen DataRaw si son 0.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Gracias por su respuesta.
Quiero deshacerme de las columnas tmp para mantener el conjunto de datos lo más simple posible. El archivo de ejemplo es un archivo muy básico con respecto a mi pregunta. En la práctica, el conjunto de datos contiene aproximadamente de 10 a 15 columnas diferentes de DataRaw, que me gusta preparar de la misma manera. También hay otras columnas diferentes añadidas.
Tienes razón sobre la columna FlyerTmp. Se puede incluir dentro de la columna DataCorr. Voy a revisar su archivo más tarde (no hay acceso a JMP en este momento).
Re: ¿Cómo cambiar una columna de fórmula en una variable?Sólo pensé en algo. Tendría que eliminar los ceros de la temperatura antes de calcular el cuantil, ya que esos ceros se incluirán. Puedes hacerlo ejecutando esto antes de x98.
miss_rows = loc(as list(temp),0);
temp[miss_rows] = .;
También puede hacer lo mismo para "final" antes de crear la nueva columna. Eso eliminaría la necesidad de reemplazar los valores faltantes al final.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Gracias por publicar su tabla de datos de muestra.
Como desea calcular los cuantiles solo para algunas filas, tendrá que tener una nueva columna basada en fórmulas. Ya que ya estás haciendo eso con dataTmp, es una buena manera de continuar. Sin embargo, no necesita flyerTmp ya que todo lo que está haciendo es un condicional que luego usa en dataCorr. Solo puedes poner esa condición directamente en dataCorr.
He hecho esto en la tabla de datos adjunta con 100,100 filas. Es bastante rapido
Tengo curiosidad por qué le preocupaba deshacerse de la columna intermedia? ¿La curiosidad intelectual o alguna otra preocupación?
Re: ¿Cómo cambiar una columna de fórmula en una variable?Intenta algo como esto. La idea es hacer una multiplicación por elementos de los datos con vectores de valores booleanos, que son sus condiciones lógicas. Esto debería ser bastante rápido, pero admito que estoy lejos de ser un experto en lo que será computacionalmente más eficiente.
dt = Current Data Table();
//Get values for other columns
raw = dt:DataRaw << Get Values;
P1vals = dt:P1 << Get Values;
P2vals = dt:P2 << Get Values;
//Compute equivalent of DataTmp
temp = (P1vals == 0 & P2vals < 3):*raw;
//Compute 98th percentile of temp
x98 = quantile(0.98, temp);
//Compute final column
final = (temp <= x98):*temp;
dt << New Column("DataCorr", << Set Values(final));El resultado tendrá 0 en lugar de faltar. Puede reemplazarlos con valores faltantes con algo como esto (aunque si todavía tiene el DataCorr original en su tabla, el script anterior producirá una columna "DataCorr 2" y esta línea de código no funcionará en la columna derecha).
//Replace 0s with missing
dt:DataCorr[dt << Get Rows Where(:DataCorr == 0)] = .;
Re: ¿Cómo cambiar una columna de fórmula en una variable?Hola Cameron ,
Adjunto el archivo example.jmp. ¿Cuál es la mejor manera de evitar la creación de las columnas: DataTmp y: FlyerTmp para obtener las columnas: DataCorr con la ayuda de las columnas: P1,: P2 y: DataRaw?
Esto debería ser aplicable en conjuntos de datos con más de 100,000 filas.
Thomas
Re: ¿Cómo cambiar una columna de fórmula en una variable?Solo revisando un par de detalles:
1. ¿Es el valor el mismo para todas las filas en la primera columna?
2. ¿Estás scripting la adición de columnas?
-Lo que podría ser posible es tener el primer resultado calculado en la memoria, como una sola columna en una matriz, luego, si desea esos valores, solo consígalos de la matriz y cree una nueva columna con esos valores. A menudo, esto es más rápido que agregar una columna y prepararlo para la actualización en la tabla (para tablas realmente altas).
-Mejor aún, haga ambos cálculos en una matriz (en memoria, no en la tabla) y luego publique los resultados de nuevo en la tabla.
-Si todos los valores son los mismos en la columna 1, entonces tal vez solo calcule esto en un script y agréguelo a la tabla de datos como una tabla
Variable y referencia la variable en la columna 2.
Muchas buenas opciones, pero todas dependen de lo que estés tratando de hacer.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Tendrás que publicar un ejemplo práctico si quieres una ayuda más precisa.
Re: ¿Cómo cambiar una columna de fórmula en una variable?Gracias por la solución. Funciona. Sin embargo, esto puede ralentizar el cálculo en caso de que algunos estados se estén utilizando dentro de la fórmula.
Re: ¿Cómo cambiar una columna de fórmula en una variable?¿Puede simplemente copiar la fórmula de la primera columna y pegarla en la fórmula de la segunda columna donde se haga referencia a la primera columna?