Summe Anzahl aufeinanderfolgender Nullen in einer SpalteHallo JMP Community,
Ich arbeite derzeit an einem Projekt, das zufällig entweder eine "0" oder eine "1" für 100 verschiedene Zeitwerte ausgibt. Jeder Lauf davon entspricht einem "Samen". Ich muss irgendwie etwas codieren, das die Anzahl aufeinanderfolgender Nullen ab einem Zeitpunkt für jeden Startwert zählt, und es dann in einer Datentabelle ausgeben. Wenn der zu einem bestimmten Zeitpunkt bewertete Startwert mit einer 1 beginnt, ist seine Summe 0. Sobald alle diese Summen aufeinanderfolgender Nullen gefunden sind, muss der Durchschnitt ermittelt werden (der Durchschnitt der Nullen, bevor eine 1 auftritt). Unten ist der Code angegeben, den ich bisher habe (er erstellt nur die Startwerte und Zeitwerte).
Vielen Dank,
Kyle
Alle schließen (Datentabellen, kein Speichern);
// Erstelle die Datentabelle
dt = Neue Tabelle ("Fall 1",
Zeilen hinzufügen (100),
Neue Spalte ("Zeit", Formel festlegen (Sequenz (1, 100)),
Neue Spalte ("Startwert 1", Numerisch, "Fortlaufend", Format ("Beste", 10), Formel (Zufällige Ganzzahl (0, 1))
);
Für (i = 2, i <101, i ++,
dt << Neue Spalte ("Seed" || Char (i), Numerisch, Kontinuierlich, Formel (Zufällige Ganzzahl (0, 1)),
);
Betreff: Summe der aufeinanderfolgenden Nullen in einer SpalteWie soll der Durchschnitt als Ausgabe gewertet werden? Auf folgende Weise wird es in ein assoziatives Array eingefügt:
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));
);
Dies kann leicht angepasst werden, um in eine Tabelle oder in ein beliebiges Format auszugeben, das Sie bevorzugen.
Betreff: Summe der aufeinanderfolgenden Nullen in einer SpalteVielen Dank für die ausführliche Antwort - allerdings habe ich immer noch Probleme. Nach meinem Verständnis macht das Assoziative Array einen Schlüssel ... Beispielsweise enthält die Ausgabe "[" Seed 1 "] => 2.143"
Da jeder Lauf einem Zeitwert entspricht, sollte er nicht so aussehen wie "[" Zeit 1 "=> 2.143"]?
Wie genau würde ich es an einen Tisch anpassen lassen?
Ich habe versucht, dt << New Column ("Mean", Formel setzen (seed_avg)); , aber das gibt mir eine ganze Liste von Werten für jeden Eintrag in der Spalte.
Vielen DankBetreff: Summe der aufeinanderfolgenden Nullen in einer SpalteEntschuldigung, ich habe nicht verstanden, dass Sie über Zeilen gehen möchten, anstatt jede Spalte nach unten. Hier ist eine Möglichkeit, die Ergebnisse nach Zeitpunkt in einer neuen Spalte anzuzeigen.
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);
);