Buscando generar dos columnas basadas en algún patrón de otras columnasHola a todos,
Estoy buscando generar dos columnas nuevas basadas en patrones en otras dos columnas ("Columna1 requerida" y "Columna2 requerida"). Por favor, vea la imagen adjunta -

¿Alguna ayuda / sugerencia?
Gracias.
ScriptingRe: Buscando generar dos columnas basadas en algún patrón de otras columnasA continuación, se muestra una fórmula para la columna a la que se refiere la columna obligatoria 2.Cuando estudie el código, verá que todo lo que hace es aplicar las reglas lógicas que ha establecido y que deben verificarse al determinar los valores de Inicio y Fin.También contiene la configuración del valor para la columna Columna requerida 1. Para ejecutar esta fórmula, simplemente cree la Columna requerida 1 y la Columna requerida 2. Configure la Columna requerida 2 para que sea una columna de caracteres.Luego abra la fórmula para la Columna Requerida 2 y copie la fórmula a continuación en la columna.

RCValue = "";
:Required Column 1[Row()] = .;
If( :Sensor != "Primary",
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Sensor == "Primary" & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No" & other == "Yes" & Row() !=
N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;
Re: Buscando generar dos columnas basadas en algún patrón de otras columnasHola @txnelson ,
Casi funcionó con pocas entradas falsas. Creo que debemos agregar una condición adicional en: columna de ocurrencia. Es decir: La ocurrencia debe cambiar para establecer: Columna requerida 2 == "Inicio" (y puede ser una opción; debería ser la misma cuando: Columna requerida 2 == "Fin").
Algo como - Dif (: Ocurrencia)! = 0 entonces solo: Columna requerida 2 == "Inicio"
Para mis datos de muestra (95 filas) estuvo bien con su fórmula, pero mis datos reales, que tienen más de 300k filas, están dando muchas entradas incorrectas como a continuación (creo que debería estar bien una vez que se agregue un requisito adicional sobre: Ocurrencia). ) Esta es solo una captura de pantalla de la entrada incorrecta.

¡¡Con un poco de suerte!!Puedo modificar la fórmula / código y puedo agregar el requisito de: Ocurrencia. encima de su fórmula.
Gracias de nuevo por vuestro apoyo.
Re: Buscando generar dos columnas basadas en algún patrón de otras columnasHola @txnelson y todo,
Pude modificar su código basado perfectamente para mis requisitos. Pero en la solución de problemas de la segunda etapa, necesito algo como esto:
Marca: Sensor = "Primario" (1º) alrededor de un cambio consecutivo en: Ocurrencia.En la captura de pantalla dada:
valores requeridos en el medio --- Última "Primaria" en Ocurrencia = 2 y Primero "Primario" en Ocurrencia = 3 [cambio consecutivo en la ocurrencia]
Encontrar la primera primaria no es tan difícil, ¿no estás seguro de cómo encontrar la última primaria? Pensando en invertir de alguna manera (orden descendente) los datos del subconjunto para Ocurrencia = 2, encuentre el valor y luego revertirlo. ¡No puedo ponerle fórmula! ¿Alguna otra forma de hacer eso?
¿Alguna ayuda?
Gracias.

Re: Buscando generar dos columnas basadas en algún patrón de otras columnasModificó el código que le proporcioné anteriormente para obtener los resultados que proporcionó en su respuesta más reciente. Proporcione el JSL que está utilizando para obtener los resultados que muestra en su tabla de datos de muestra.
Re: Buscando generar dos columnas basadas en algún patrón de otras columnasHola @txnelson , Gracias por su respuesta.
No puedo obtener el punto de inicio correcto (requisito actualizado). En la Tabla de datos ("Datos de muestra actualizados") y en la imagen, ingresé manualmente las columnas de datos corregidos.
La formula. Solía obtener la "Columna requerida 1 anterior" y la "Columna requerida 2 anterior" es esto (es como usted me dio, agregué una condición de ocurrencia) -
RCValue = "";
:Required Column 1[Row()] = .;
If( :Occurrence != Lag( Occurrence, -1 ),
other = "Yes"
);
If( Row() == 1 | :ID != Lag( :ID ) | :"Sub-set"n != Lag( :"Sub-set"n ),
counter = 0;
withinStart = "No";
other = "Yes";
);
If(
:Sensor == "Primary" & :Occurrence == Lag( :Occurrence, -1 ) & Dif( :Occurrence ) == 0 &
withinStart == "Yes",
RCValue = "End";
withinStart = "No";
other = "No";,
:Occurrence != Lag( Occurrence, -1 ) & Lag( :Sensor, -1 ) != "Primary" & withinStart == "No"
& other == "Yes" & Row() != N Rows( Current Data Table() ),
withinStart = "Yes";
counter = counter + 1;
RCValue = "Start";
);
If( withinStart == "Yes" | RCValue == "End",
:Required Column 1[Row()] = counter
);
RCValue;

Muchas gracias.
Re: Buscando generar dos columnas basadas en algún patrón de otras columnasestoy confundido.Por lo que puedo ver, el script que escribí parece funcionar, excepto que después de la línea 44 en la tabla de datos, ha cambiado las reglas y ahora quiere que End esté en la fila antes del siguiente valor de Primario.Que es lo que quieres

Re: Buscando generar dos columnas basadas en algún patrón de otras columnasHola Jim,
Perdón por la confusion.
Su fórmula original (creo, no la he estropeado) funcionó para la mayoría de los casos, pero también capturó algunos puntos incorrectos y omitió algunos en el conjunto completo de datos. En el subconjunto adjunto de datos (solo para un "ID" y un valor de "Subconjunto") hay una columna basada en su fórmula que tiene algunos puntos incorrectos.
Filas: 647-649 entrada incorrecta (color rojo)
Filas: 868-937 no capturado (color rojo)
Filas: 1307-1311 entrada incorrecta (color rojo)
Y esto se solucionó cuando puse la condición en: Ocurrencia.
Ahora estoy buscando -
1. Último sensor primario en ocurrencia = n (digamos n = 2), márquelo como "Inicio"
2. Primer sensor primario en ocurrencia = n + 1 (= 3), y si no hay un sensor primario para n = 3, debería rebajar / marcar el valor en Ocurrencia = n + 2 == 4. Márcalo como "Fin"
3. Y por último, complete los números entre "Inicio" y "Fin" en una nueva columna.
Una forma alternativa de pensar en (puede ser) -
Si podemos marcar - en una sola ocurrencia n (n = 2) Primer sensor primario como FIN y en el último sensor primario como Inicio y luego llenar valores entre Inicio y Fin en una nueva columna.
Espero que esto ayude y aclare las cosas.
Gracias,
Creo que esto puede ser, si puedo encontrar un
Re: Buscando generar dos columnas basadas en algún patrón de otras columnasEl problema parece estar en la lógica que se aplica a la variable JSL "otro".Hoy no tengo tiempo para trabajar en el tema, pero mañana por la tarde debería poder hacer una investigación.