Suma de ceros consecutivos en una columnaHola comunidad JMP,
Actualmente estoy trabajando en un proyecto que genera aleatoriamente un "0" o "1" para 100 valores de tiempo diferentes. Cada ejecución de esto corresponde a una "semilla". Necesito codificar de alguna manera algo que cuente el número de ceros consecutivos a partir de un punto de tiempo para cada semilla, y luego imprimirlo en una tabla de datos. Si la semilla que se evalúa en un momento determinado comienza con un 1, su suma es 0. A partir de ahí, una vez que se encuentran todas estas sumas de 0 consecutivos, necesito encontrar su promedio (el promedio de ceros antes de que ocurra un 1). A continuación se adjunta el código que tengo hasta ahora (solo crea las semillas y los valores de tiempo).
Gracias,
Kyle
Cerrar todo (tablas de datos, sin guardar);
// Hacer la tabla de datos
dt = Nueva tabla ("Caso 1",
Agregar filas (100),
Nueva columna ("Tiempo", Establecer fórmula (Secuencia (1, 100))),
Nueva columna ("Semilla 1", Numérico, "Continuo", Formato ("Mejor", 10), Fórmula (Entero aleatorio (0, 1)))
);
Para (i = 2, i <101, i ++,
dt << Nueva columna ("Semilla" || Char (i), Numérico, Continuo, Fórmula (Entero aleatorio (0, 1))),
);
Re: suma de ceros consecutivos en una columna¿Cómo quieres que el promedio cuente como salida? Aquí hay una manera que lo coloca en una matriz asociativa:
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));
);
Esto se puede adaptar fácilmente a la salida a una tabla o al formato que prefiera.
Re: suma de ceros consecutivos en una columnaGracias por la respuesta detallada, sin embargo, todavía tengo algunos problemas. Según tengo entendido, la matriz asociativa hace una clave ... Por ejemplo, la salida contiene "[" Semilla 1 "] => 2.143"
Dado que cada ejecución corresponde a un valor de tiempo, ¿no debería parecerse a "[" Tiempo 1 "=> 2.143"]?
Además, ¿cómo exactamente lo adaptaría a una mesa?
Intenté dt << Nueva columna ("Mean", Establecer fórmula (seed_avg)); , pero eso me da una lista completa de valores para cada entrada en la columna.
GraciasRe: suma de ceros consecutivos en una columnaLo siento, no entendí que deseabas cruzar filas en lugar de bajar por cada columna. Aquí hay una manera de obtenerlo por punto de tiempo con los resultados en una nueva columna.
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);
);