Al seleccionar entradas de filas duplicadas, guarde su índice y luego cree una nueva lista que no contenga las filas duplicadas.Hola.
Esta es una continuación de la pregunta en este enlace: Resuelto: obtener valores de seleccionar dónde - Comunidad de usuarios de JMP . Al final de esta discusión (en el enlace proporcionado), hay una forma de jsl que selecciona ciertas filas y las imprime usando la función show(). En otra publicación (perdí el enlace), había un método para seleccionar filas duplicadas usando la función Seleccionar fila duplicada () y luego eliminarlas.
Mi objetivo es seleccionar filas duplicadas y luego obtener su índice para una columna seleccionada en la tabla. Por ejemplo, quiero encontrar las entradas duplicadas para la columna de edad en la tabla de clases grande.
El segundo objetivo es crear una nueva columna que tenga solo las filas únicas sin eliminar la fila duplicada.
Se agradece cualquier orientación.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit:age << Select Duplicate Rows( Match (:age, :age ) );
Group1List = (dt_limit:age[dt_limit << get selected rows]);
theCount = N Rows( dt << get selected rows);
Show( Group1List);
Automatización y secuencias de comandosAnálisis y modelado de datos básicosAcceso a los datosRe: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Gracias @Jed_Campbell . ¡Esto es bueno muchas gracias!
Estoy intentando capturar esa columna en una lista para realizar más acciones. ¿Podrías ayudarme con eso? ¡gracias!
Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Esta línea agregada al final de su secuencia de comandos debería incluir esa columna en una lista:
future_list = as list (dt_limit:Unique << Get Values);
Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Gracias @Jed_Campbell . Funciona perfectamente bien.
Otro problema con el que me estoy encontrando en este momento es qué pasaría si en lugar de tener una columna, es decir, edad, tuviera una lista de columnas, es decir, [edad, altura, peso, etc.]. ¿Cómo cambiaría el código? Intenté usar una combinación de columnas y evaluación para recuperar la entrada de la lista como una columna. Sé que el siguiente código funciona, pero ¿cómo lo modificaría para que funcione en cualquier lista de columnas? Tendría algo como As column (ListOfTargetCol[i])[i] ); O :(ListOfTargetCol[i])[i]); ¿Significa que jmp buscará la iésima entrada de la lista y luego buscará esa columna (la columna) iésima entrada? Soy nuevo en jsl y no estoy seguro de cómo está estructurado. Indique cómo solucionar este problema.
Como referencia, estoy usando un código similar al que proporcionaste anteriormente e intenté agregar algo como esto: También tengo curiosidad por saber si será diferente si se trata de una lista de nombres de una cadena como las que aparecen a continuación. ¡Muchas gracias!
ListOfTargetCol = { age, height, weight};
StringOfTargetCol = { "age", "height", "weight"};
... dt_limit:Unique[i] = dt_limit:( As coulmn(ListOfTargetCol[1])) [i]...
Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.¿Es algo como esto lo que estás buscando? Puede que haya formas más elegantes de lograrlo, pero aquí hay una forma de crear una nueva columna con solo la primera fila única.
dt_limit = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt_limit << Select Duplicate Rows( Match (:age ) );
Group1List = (dt_limit << get selected rows);
theCount = N Items (Group1List);
//create a new column that has only the unique rows without deleting the duplicated row
dt_limit << Invert Row Selection;
UniqueList = dt_limit << Get Selected Rows;
dt_limit << new column ("Unique");
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Si no necesita las selecciones, también puede usar fórmula/resumen (o muchas otras opciones)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;
// Option2
dt << New Column("Row", Numeric, "Continuous", Formula(Row()));
dt_summary = dt << Summary(
Group(:age),
Min(:Row),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
Column(dt_summary, 1) << Set Name("R2");
dt << Update(With(dt_summary), Match Columns(:Row = :Row));
Close(dt_summary, no save);

Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.¡Gracias @jthi por tu ayuda! Ambas soluciones funcionan bien, pero todavía no sé qué sintaxis debería usar.
In the loop below, we have the dt:age[i] which iterates through the "age" column in the dt_limit loop. <BR />What if I want to have more than one column to iterate through.<BR /><BR /> The only solution I can find (and works with no error) is to copy past the loop for <BR />all the needed columns i.e. age, height, ..etc. It is just not efficient and will not work for a large number of columns. <BR /><BR />Any suggestions would be appreciated.
<BR />
for each ({i}, UniqueList,
dt_limit:Unique[i] = dt_limit:age[i]
);Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.No estoy seguro de lo que intentas hacer. Puedes agregar más columnas a Col Min como byvars
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;

Col Mínimo(nombre, )
Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Gracias @jthi . Es cierto. Puedo agregar más columnas como sugirió anteriormente. Sin embargo, estoy tratando de generalizar la solución. Lo que intento hacer es tomar la entrada del usuario para determinar qué columnas evaluar. Colocarlas en una lista. Y luego, evaluarlas todas. Por ejemplo, el usuario puede elegir solo la edad y la altura. Necesito que el código sea lo más flexible posible.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
// Option1
TargetList = {age, sex, height};
new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == Col Min(Row(), :age, :sex), :age, .)
));
dt << Run Formulas;
new_col << Delete Formula;Re: Seleccionar entradas de filas duplicadas, guardar su índice y luego crear una nueva lista que no contenga las filas duplicadas.Puedes construir la fórmula con expresiones
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
sel_cols = {"age", "sex", "height"};
colmin_expr = Expr(Col Min(Row()));
For Each({sel_col}, sel_cols,
Insert Into(colmin_expr, Name Expr(AsColumn(dt, sel_col)))
);
Eval(Substitute(
Expr(new_col = dt << New Column("R1", Numeric, Continuous, Formula(
If(Row() == _colminformula_, :age, .)
))),
Expr(_colminformula_), Name Expr(colmin_expr)
));
dt << Run Formulas;
new_col << Delete Formula;
También debería poder modificar con bastante facilidad la versión Resumen para que funcione con entradas de una lista.