Abtastung in r ohne aufeinanderfolgende identische Ziffern

8

Ich bin ziemlich neu in R, aber ich habe viel gesucht und keine Antwort auf meine Frage gefunden.

Ich habe einen Vektor mit vielen Wiederholungen von 8 Ziffern:

%Vor%

Nun möchte ich eine Permutation davon nehmen (vermutlich mit sample(allNum, 420, replace=FALSE) ), aber ich möchte keine aufeinanderfolgenden identischen Ziffern - zum Beispiel: 1 2 2 8

Gibt es einen einfachen Weg, dies zu tun?

    
icnhaap 04.04.2013, 18:03
quelle

3 Antworten

3

Sie haben ein Problem, bei dem die Möglichkeit besteht, Elemente willkürlich auszuwählen, statt auf Ihre Auswahl beschränkt zu sein. Wenn die Anzahl der Elemente, aus denen Sie auswählen müssen, mehr als $ 2n-1 $ beträgt, wobei $ n $ die Häufigkeit ist, mit der das häufigste Element auftritt, können Sie ein zufälliges Element auswählen (konsistent mit den vorherigen Einschränkungen). Wenn diese Zahlen jedoch gleich sind, muss sich der häufigste Wert für den Rest der Sequenz an jeder anderen Position befinden (und die Werte dazwischen können nach dem Zufallsprinzip zugewiesen werden). Wenn diese Einschränkung erkannt wird, ist ein einzelner Durchgang möglich (keine zufälligen Auswahlen mehr als im ursprünglichen Vektor vorhanden sind).

%Vor%

Dies wird fehlschlagen, wenn es keine mögliche Anordnung gibt: length(x) < 2 * max(table(x)) - 1 , aber eine erste Überprüfung könnte hinzugefügt werden, falls gewünscht.

    
Brian Diggs 04.04.2013 19:32
quelle
0

Entlehnung aus einer vorherigen Antwort , eine Methode ist Brute-Force und weiterhin Sampling, bis Sie eine Permutation mit dem erhalten gewünschte Eigenschaften.

%Vor%

Der folgende Befehl benötigt jedoch eine lange Zeit, da identische fortlaufende Ziffern in dem von Ihnen angegebenen Beispiel sehr häufig vorkommen. Dieser Ansatz wäre in Ihrer spezifischen Situation nicht möglich.

%Vor%     
Blue Magister 04.04.2013 18:28
quelle
0

Hier ist ein einfacher Algorithmus dafür:

%Vor%     
eddi 04.04.2013 22:48
quelle

Tags und Links