Somma degli zeri consecutivi in una colonnaBuongiorno Community JMP,
Attualmente sto lavorando a un progetto che genera casualmente uno "0" o "1" per 100 diversi valori temporali. Ogni esecuzione di questo corrisponde a un "seme". Devo in qualche modo codificare qualcosa che conta il numero di 0 consecutivi a partire da un punto temporale per ogni seme, e quindi lo stampa in una tabella di dati. Se il seme valutato in un determinato momento inizia con 1, la sua somma è 0. Da lì, una volta trovate tutte queste somme di 0 consecutivi, ho bisogno di trovare la sua media (la media di zero prima che si verifichi un 1). Di seguito è riportato il codice che ho finora (crea solo i valori seed e time).
Grazie,
Kyle
Chiudi tutto (tabelle dati, nessun salvataggio);
// Crea la tabella dei dati
dt = Nuova tabella ("Caso 1",
Aggiungi righe (100),
Nuova colonna ("Tempo", Imposta formula (sequenza (1, 100))),
Nuova colonna ("Seme 1", Numerico, "Continuo", Formato ("Migliore", 10), Formula (Numero casuale (0, 1)))
);
Per (i = 2, i <101, i ++,
dt << Nuova colonna ("Seme" || Char (i), Numerico, Continuo, Formula (Numero casuale (0, 1))),
);
Ri: somma di zeri consecutivi in una colonnaCome si desidera che la media venga conteggiata come output? Ecco un modo che lo inserisce in un array associativo:
seed_avg = Associative Array();
nseed = 100;
for(i = 1, i <= nseed, i++,
col_name = "Seed " || char(i);
col = Column(dt, col_name );
count_vec = [];
count = 0;
for(j = 1, j <= N Row(dt), j++,
if(col[j] == 0,
count++,
if(col[j] == 1 & count != 0,
count_vec = count_vec |/ count;
count = 0
);
)
);
Insert Into(seed_avg, col_name, mean(count_vec));
);
Questo può essere facilmente adattato all'output in una tabella o nel formato che preferisci.
Ri: somma di zeri consecutivi in una colonnaGrazie per la risposta dettagliata, tuttavia, ho ancora qualche problema. Da quanto ho capito, l'Associative Array è una chiave ... Ad esempio, l'output contiene "[" Seed 1 "] => 2.143"
Poiché ogni esecuzione corrisponde a un valore temporale, non dovrebbe essere simile a "[" Time 1 "=> 2.143"]?
Inoltre, come potrei adattarlo esattamente a un tavolo?
Ho provato dt << New Column ("Mean", Set Formula (seed_avg)); , ma ciò mi dà un intero elenco di valori per ogni voce nella colonna.
GrazieRi: somma di zeri consecutivi in una colonnaMi dispiace, non ho capito che avresti voluto attraversare le righe invece di ogni colonna. Ecco un modo per ottenerlo per punto temporale con i risultati in una nuova colonna.
dt << New Column("Average", numeric);
nseed = 100;
for(i = 1, i <= N Row(dt), i++,
count_vec = [];
count = 0;
for(j = 1, j <= nseed, j++,
col = Column(dt, "Seed " || char(j) );
if(col[i] == 0,
count++,
if(col[j] == 1 & count != 0,
count_vec = count_vec |/ count;
count = 0
);
)
);
dt:Average[i] = mean(count_vec);
);