Somme du nombre de zéros consécutifs dans une colonneBonjour la communauté JMP,
Je travaille actuellement sur un projet qui génère au hasard un "0" ou "1" pour 100 valeurs de temps différentes. Chaque série correspond à une "graine". J'ai besoin de coder quelque chose qui compte le nombre de 0 consécutifs à partir d'un point de temps pour chaque graine, puis l'imprime dans un tableau de données. Si la graine évaluée à un certain moment commence par un 1, sa somme est 0. À partir de là, une fois que toutes ces sommes de 0 consécutifs ont été trouvées, j'ai besoin de trouver sa moyenne (la moyenne des zéros avant qu'un 1 se produise). Ci-dessous se trouve le code que j'ai jusqu'à présent (il crée uniquement les graines et les valeurs de temps).
Merci,
Kyle
Fermer tout (tableaux de données, pas d'enregistrement);
// Créer le tableau de données
dt = New Table ("Cas 1",
Ajouter des lignes (100),
Nouvelle colonne ("Time", Set Formula (Sequence (1, 100))),
Nouvelle colonne ("Seed 1", Numeric, "Continuous", Format ("Best", 10), Formula (Random Integer (0, 1))))
);
Pour (i = 2, i <101, i ++,
dt << New Column ("Seed" || Char (i), Numeric, Continuous, Formula (Random Integer (0, 1))),,
);
Objet: somme des zéros consécutifs dans une colonneComment voulez-vous que la moyenne compte comme sortie? Voici un moyen qui le place dans un tableau associatif:
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));
);
Cela peut être facilement adapté pour sortir sur une table ou quel que soit le format que vous préférez.
Objet: somme des zéros consécutifs dans une colonneMerci pour la réponse détaillée - cependant, j'ai toujours des problèmes. D'après ma compréhension, le tableau associatif fait une clé ... Par exemple, la sortie contient "[" Seed 1 "] => 2.143"
Étant donné que chaque exécution correspond à une valeur de temps, ne devrait-elle pas ressembler à "[" Time 1 "=> 2.143"]?
Aussi, comment pourrais-je l'adapter exactement à une table?
J'ai essayé dt << New Column ("Mean", Set Formula (seed_avg)); , mais cela me donne une liste complète de valeurs pour chaque entrée de la colonne.
MerciObjet: somme des zéros consécutifs dans une colonneDésolé, je n'ai pas compris que vous vouliez parcourir les lignes plutôt que descendre chaque colonne. Voici un moyen de l'obtenir par point dans le temps avec les résultats dans une nouvelle colonne.
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);
);