Contare l'elemento più frequente in una colonnaVoglio identificare facilmente l'elemento che ricorre più frequentemente in base al conteggio delle righe in una colonna JMP. Posso determinare facilmente le voci univoche, qual è il modo migliore per ottenere un conteggio da lì?
dt = Current Data Table();
summarize( lotz = by(:LOT));
Automazione e scriptingRe: Contare l'elemento più frequente in una colonnaQuesto tiene conto della possibilità di un pareggio per i più frequenti:
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: Contare l'elemento più frequente in una colonnaLa piattaforma di distribuzione ti fornirà una modalità.

Si trova sotto il triangolo rosso per il paragrafo delle statistiche riassuntive. Basta selezionare
Personalizza le statistiche riassuntive

e quindi seleziona le statistiche aggiuntive che desideri visualizzare

Re: Contare l'elemento più frequente in una colonnaSe preferisci una formula a colonna:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class Families.jmp" );
New Column( "N by age",
Formula( Col Number( 1, :age ) )
)
e per identificare il vincitore:
New Column( "max N by age",
Formula( Col Number( 1, :age ) == Col Max( Col Number( 1, :age ) ) )
)
In alternativa, puoi usare Riepiloga:
Summarize( namez = By( :age ), cnt = count(:age) );
o tabelle/riepilogo:
Data Table( "Big Class Families" ) << Summary(
Group( :age )
);
Re: Contare l'elemento più frequente in una colonnaQuesto script è bello da vedere, ma per qualche motivo assegna a numberz il valore 5 per ogni cosa.
Grazie
Re: Contare l'elemento più frequente in una colonnaIl suggerimento di riepilogo è valido. Mi restituisce 2 liste dissociate. Se riuscissi in qualche modo a trasformarle in un array associativo, potrei usare il valore massimo di "cnt" per identificare il valore di "namez" associato.
Re: Contare l'elemento più frequente in una colonnaL'ho fatto e sembra funzionare.
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: Contare l'elemento più frequente in una colonnaLa piattaforma di riepilogo è ciò che in genere utilizzo per questo scopo (il modo in cui la utilizzo dipende dal caso d'uso: pareggi, ho bisogno del conteggio, come dovrebbero essere gestiti i valori mancanti e così via)
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);
Potrebbe anche bastare usare la funzione Modalità
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
val = Mode(dt[0, "sex"]);
E ci sono molte altre opzioni (come puoi già vedere in questa discussione).
Re: Contare l'elemento più frequente in una colonnaJarmo
Fantastico! Funziona e include anche i valori non numerici. L'unica modifica che mi serve è che ignori in qualche modo i dati mancanti?
dt = Current Data Table();
val = Mode(dt[0, "process"]);
Re: Contare l'elemento più frequente in una colonnaHo apportato questa modifica e sembra che ci sia riuscito.
dt = Current Data Table();
full_proc_rows = dt << get rows where( !Is Missing( :process ) );
proc_val = Mode(dt[full_proc_rows, "process"]);