Trova la modalità in una colonna di matriciCiao!
Ho bisogno di aiuto per scrivere uno script per trovare il valore più comune su più matrici. Ho una tabella dati con centinaia di righe. Ogni riga ha una colonna di sequenza (ad es. ABCDABCD) e ho creato una colonna per mostrare le posizioni di una certa lettera all'interno di quella sequenza (ad es. La posizione di A è [1,5,0,0]).
(Sono abbastanza nuovo a scrivere script così adesso le mie matrici hanno 0 elencato quando non ci sono più posizioni contenenti quella lettera. Se esiste un modo ovvio e più efficiente per trovare più posizioni all'interno di una stringa, faccelo sapere. Altrimenti, esiste un modo per escludere 0 come una delle modalità?)
Ora vorrei esaminare tutte le posizioni chiamate in tutte le righe e trovare le posizioni più comuni.
Quello che ho:
colonna matrice a righe
1 [2, 3, 6, 8, 0, 0]
2 [2, 4, 5, 10, 0, 0]
3 [2, 7, 9, 10, 0, 0]
Quello che voglio:
Un elenco che mostra le modalità in ordine di maggior numero di occorrenze
posizione 2 - 3 occorrenze
posizione 10 - 2 occorrenze
Ho allegato lo script che attualmente ho che contiene la formula di ricerca della posizione,
Grazie!
Ri: Trova la modalità in una colonna di matriciGrazie!!Ri: Trova la modalità in una colonna di matricidt << seleziona dove (:( lettera == "A" &: riga num == 1) | (: lettera == "C" &: riga num == 2);
Non ti dà il tuo primo requisito?
E il tuo secondo requiremnt dovrebbe poter essere calcolato usando Tabulate, se sto capendo correttamente cosa vuoi
Ri: Trova la modalità in una colonna di matriciDevo essere in grado di individuare le posizioni di diverse lettere per riga e quindi confrontare le righe. Per esempio ho bisogno di trovare le posizioni di tutti "A" nella sequenza della riga 1 e tutte le posizioni di "C" nella sequenza della riga 2. Quindi devo essere in grado di vedere la posizione più frequente nella tabella.
Dalla sceneggiatura che mi hai dato (grazie a proposito!) Non riesco ancora a fare questo confronto a livello di tavolo.
Ri: Trova la modalità in una colonna di matriciEcco uno script che utilizza un metodo diverso per portarti a un punto in cui hai tutti i valori di Lettera analizzati in una nuova colonna da cui puoi eseguire l'analisi
dt=current data table();
// Create a new table with just the Sequence column in it
dtbuild = dt << subset(columns("Sequence"), selected rows(0));
// Find the longest sequence
Maxstring = col max(length(:sequence));
// Add a new column called Row Num that will let you keep track of what row
// each letter came from
dtBuild << New column("Row Num", formula(row()));
// Convert the data into real values
dtBuild:Row Num << delete property("formula");
// Create a new column for each possible position in the sequence number, and
// strip off the ith character and place it into the column
For(i=1,i<=Maxstring,i++,
dtBuild << new column("C" || char(i),character, formula(substr(:sequence,eval(i),1)));
column(dtBuild,i) << delete property("formula");
);
// Create a list of the columns in the dtBuild data table
TheColumns = dtBuild << get column names();
// We are only going to stack the columns created that have bits of the
// sequence in them, so get rid of the names of the first 2 column in the data table
TheColumns = remove(TheColumns,1,2);
// Stack all of the columns in to a data table that can be worked with
dtFinal = dtBuild << Stack(
columns( TheColumns),
Source Label Column( "Position" ),
Stacked Data Column( "Letter" ),
Name( "Non-stacked columns" )(Keep( :Row Num ))
);
// Get rid of the interium table
close(dtBuild, nosave);
// Delete rows that have no letter value
dtFinal << select where(:Letter == "");
dtFinal << delete rows;