2016-05-11 12 views
1

Ich fürchte, ich kann die Antwort nicht finden, also brauche ich Ihr Fachwissen.Randomisierung von Paaren und Bestellung in R

Ich muss eine Reihe von Daten in R zufällig randomisieren, wobei die Datensätze Sätze von Auswahlmöglichkeiten sind (dargestellt durch Buchstaben hier) in Paaren; Allerdings muss ich für jeden Satz auch die Rangfolge (die zuerst geht) zufallsmäßig verteilen. Zusätzlich muss ich eine negative Kontrolle (XX) einschließen. Es würde wie folgt aussehen:

(1) X A or A X 

(2) X B or B X 

(3) X C or C X 

(4) X D or D X 

(5) X E or E X 

(6) XX 

ich einfach 1-6 genug sample(1:6, 4) mit Randomisierung kann, aber ich weiß nicht, wie auch in der Randomisierung für das Paar, um hinzuzufügen. Irgendwelche Ideen sind großartig!

Antwort

1

ursprünglichen Satz von Daten sieht wie folgt aus der Annahme:

li 
[[1]] 
[1] "X" "A" 

[[2]] 
[1] "X" "B" 

[[3]] 
[1] "X" "C" 

[[4]] 
[1] "X" "D" 

[[5]] 
[1] "X" "E" 

[[6]] 
[1] "X" "X" 

Sie können randomize es sowohl auf der Ebene der Liste und auf der Ebene jedes Paares als dies:

lapply(li, function(pair) pair[sample(1:2)])[sample(1:6)] 
[[1]] 
[1] "X" "D" 

[[2]] 
[1] "B" "X" 

[[3]] 
[1] "E" "X" 

[[4]] 
[1] "X" "X" 

[[5]] 
[1] "X" "A" 

[[6]] 
[1] "C" "X" 
+0

Das ist großartig! Vielen Dank!! –

0

Wenn ich die Frage verstehen, unter der eine wenig brutale Gewalt, aber ich glaube, Ihre Frage beantwortet

s<- c("a","b","c","d","e","x") 
n<-6 

(x<-cbind(sample(s,n),rep("x",n))) 

for (i in 1:n) { 
    if(sample(1:2,1)==2) { 
    tmp<-x[i,1] 
    x[i,1] <- x[i,2] 
    x[i,2] <- tmp 
    } 
} 
x 
+0

Psidoms Lösung ist leicht effizienter als die, die ich gerade gepostet habe. – greengrass62

+0

Das ist ok, ich schätze die Hilfe! –

0

Wenn ich unde rstand; Sie haben LETTERS[1:5] und LETTERS[24] (X), die Sie aus zweimal mit zufälliger Reihenfolge Stichproben. Dies sollte es tun;

c(sample(LETTERS[c(1:5, 24)], 1), LETTERS[24])[sample(2)] 

Aufgegliedert;

c(        ## combination of 
sample(LETTERS[c(1:5, 24)], 1), ## A:E, X, sampled once 
LETTERS[24])      ## and X 
[sample(2)]      ## re-sampled 

z.B.

set.seed(1337) 
[1] "X" "D" 

Eine Liste möglicher Ergebnisse;

set.seed(1337) 
replicate(10, c(sample(LETTERS[c(1:5, 24)], 1), LETTERS[24])[sample(2)]) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] "X" "C" "X" "X" "E" "X" "C" "E" "X" "X" 
[2,] "D" "X" "X" "A" "X" "A" "X" "X" "D" "X" 
+0

Jonathan, Ihre Ausgabe zeigt keine "X"/"B" -Kombinationen. Gibt es eine Variante, die alle 6 Kombinationen vor dem Wiederholen erzwingt? – greengrass62

+0

Das wäre nicht zufällig. Setze die Wiederholungen höher (zB 100 mit dem gleichen Startwert) und du erhältst "X"/"B" in den Wiederholungen 12, 14, 50, 52, 64, 80, 84, 85 und 89. –

+0

Ja, du hast recht . Ich "las" die Frage nach, dass Elise einen Fragebogen und die Antworten oder etwas in dieser Richtung randomisierte. (Jedenfalls habe ich bei deiner Antwort etwas gelernt ... ordentlich.) – greengrass62