Contar el elemento que aparece con mayor frecuencia en una columnaQuiero identificar fácilmente el elemento que aparece con mayor frecuencia mediante el recuento de filas en una columna de JMP. Puedo determinar fácilmente las entradas únicas, ¿cuál es la mejor manera de obtener un recuento a partir de ahí?
dt = Current Data Table();
summarize( lotz = by(:LOT));
Automatización y scriptingRe: Contar el elemento que aparece con mayor frecuencia en una columnaEsto tiene en cuenta la posibilidad de un empate en los casos más frecuentes:
Names Default To Here( 1 );
dt = Data Table( "Big Class" );
dt << Add Rows( {:name = "BARBARA", :age = 13, :sex = "F", :height = 100, :weight = 79} );
Summarize( namez = By( :name ) );
numberz = Transform Each( {v, i}, namez, Length( Where( dt, :name == v ) ) );
max_num = Max( numberz ); //2
big_name = namez[Where( numberz == max_num )]; //{"BARBARA", "ROBERT"}Re: Contar el elemento que aparece con mayor frecuencia en una columnaLa Plataforma de Distribución te proporcionará un Modo.

Está debajo del triángulo rojo para el párrafo de estadísticas de resumen. Simplemente seleccione
Personalizar estadísticas de resumen

y luego seleccione las estadísticas adicionales que desea que se muestren

Re: Contar el elemento que aparece con mayor frecuencia en una columnaSi prefiere una fórmula de columna:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
New Column( "N by age",
Formula( Col Number( 1, :age ) )
)
y para identificar al ganador:
New Column( "max N by age",
Formula( Col Number( 1, :age ) == Col Max( Col Number( 1, :age ) ) )
)
Alternativamente, puedes utilizar Resumir:
Summarize( namez = By( :age ), cnt = count(:age) );
o tablas/resumen:
Data Table( "Big Class Families" ) << Summary(
Group( :age )
);
Re: Contar el elemento que aparece con mayor frecuencia en una columnaEste es un script de buena apariencia pero, por alguna razón, asigna el número 5 a todo.
Gracias
Re: Contar el elemento que aparece con mayor frecuencia en una columnaLa sugerencia de resumen es buena. Me da dos listas disociadas. Si pudiera convertirlas en un array asociativo, podría usar el valor máximo de "cnt" para identificar el valor asociado de "namez".
Re: Contar el elemento que aparece con mayor frecuencia en una columnaHice esto y parece funcionar.
Summarize( namez = By( :LOT ), cnt = count(:LOT) );
keys = namez;
values = Eval List(cnt);
AA = Associative Array(keys, values);
For( g = 1, g <= N Items( AA ), g++,
If(values[g] == Max(cnt), mainLOT = keys[g]));Re: Contar el elemento que aparece con mayor frecuencia en una columnaLa plataforma de resumen es lo que generalmente utilizo para esto (cómo la uso depende del caso de uso: empates, necesito el recuento, cómo se deben manejar los valores faltantes, etc.)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt_summary = dt << Summary(
Group(:sex),
Freq("None"),
Weight("None"),
output table name("res"),
Private
);
// Using Loc Max
max_row = Loc Max(dt_summary[0, "N Rows"]);
max_val = dt_summary[max_row, 1];
show(max_val);
// Sorting
dt_summary << Sort(By(:N Rows), Replace Table, Order(Descending));
my_val = dt_summary[1, 1];
show(my_val);
Close(dt_summary, no save);
También podría ser suficiente usar la función Modo
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
val = Mode(dt[0, "sex"]);
Y hay muchas otras opciones (como ya puedes ver en este hilo).
Re: Contar el elemento que aparece con mayor frecuencia en una columnaJarmo
¡Genial! Esto funciona e incluye valores no numéricos. La única mejora que necesito es que ignore los datos faltantes de alguna manera.
dt = Current Data Table();
val = Mode(dt[0, "process"]);
Re: Contar el elemento que aparece con mayor frecuencia en una columnaHice este ajuste y parece que tuve éxito.
dt = Current Data Table();
full_proc_rows = dt << get rows where( !Is Missing( :process ) );
proc_val = Mode(dt[full_proc_rows, "process"]);