2017-12-05 7 views
1

Ich habe eine Frage zum Sampling: Ich möchte sukzessive Nummer in einem Vektor ohne Ersatz probieren. Gibt es einen einfachen Weg dazu? Zum BeispielBeispielsequenz aufeinanderfolgender Ganzzahl eines Intervalls

sample(c(1:100), 10, replace = F) 
76 99 94 53 12 34 5 82 75 30 

gibt mir 10 Zahl zwischen 1 und 100. Nun würde ich ersatzlos 10 Sequenz von 3 aufeinanderfolgenden ganzen Zahl haben mag: c(2,3,4), c(10,11,12), c(82,83,84) usw.

Die verschiedenen Sequenzen überlappen können, das heißt, wenn c(2,3,4) meine erste Stichprobe ist, dann kann keiner der folgenden diese Nummern haben.

ich auch die Möglichkeit der Probenahme 10 Sequenzen verschiedener Größen aussehen würde, die durch einen Vektor gegeben Größen wie

sizevec <- sample(c(1:4),10,replace = T) 

Danke für die Hilfe

Antwort

0

unter Verwendung einer Lösung tow while Schleifen Proben zu nehmen. Nach dem Ausführen des Codes ist x eine Liste der gewünschten Ausgabe.

# Set seed for reproduciblility 
set.seed(123) 

# Create a list to store values 
x <- list() 
# Create a vector to store values in x 
y <- integer() 

# Set the threshold to stop 
threshold <- 4 

# Set the condition 
condition <- TRUE 

while (length(x) < threshold){ 
    while (condition){ 
    # Sample a number between 1 to 98 
    s <- sample(c(1:98), 1) 
    # Create a sequence 
    se <- s:(s + 2) 
    # Check if the values in se is in y, save it to the condition 
    condition <- any(se %in% y) 
    } 
    # Save se to the list 
    x[[length(x) + 1]] <- se 
    # Update y 
    y <- unlist(x) 
    # Reset the condition 
    condition <- TRUE 
} 

# View the results 
x 
# [[1]] 
# [1] 29 30 31 
# 
# [[2]] 
# [1] 79 80 81 
# 
# [[3]] 
# [1] 41 42 43 
# 
# [[4]] 
# [1] 89 90 91 
+1

Ja, das wird funktionieren. Ich habe bis jetzt keine bessere Lösung gefunden. Danke für Ihre Hilfe und Zeit – denis

+0

@denis Ich entschied mich, 'sample (c (1: 100), 1)' in 'sample (c (1:98), 1)' zu ändern, um sicherzustellen, dass alle Werte zwischen 1 und 100 liegen . – www

0

HALLO Sie unklar sind, wenn die Vektoren überlappen oder nicht. die unter der Annahme, überlappen diese

lapply(sample(c(1:97), 10, replace = F),function(i){ 0:2 + i}) 

mit statistischer Länge dann so

aussehen würde funktionieren sollte
lapply(sample(c(1:97), 10, replace = F),function(i){ 0:sample(1:10,1) + i}) 
+0

Eigentlich würde Ich mag sie überlappen nicht. Entschuldigung, ich habe meine Frage bearbeitet – denis

2
set.seed(42) 
lapply(sample(1:10, 1) + cumsum(sample(4:10, 10, TRUE)), function(x) x + 1:3) 
# [[1]] 
# [1] 21 22 23 

# [[2]] 
# [1] 27 28 29 

# [[3]] 
# [1] 36 37 38 

# [[4]] 
# [1] 44 45 46 

# [[5]] 
# [1] 51 52 53 

# [[6]] 
# [1] 60 61 62 

# [[7]] 
# [1] 64 65 66 

# [[8]] 
# [1] 72 73 74 

# [[9]] 
# [1] 80 81 82 

# [[10]] 
# [1] 87 88 89 
Verwandte Themen