Ich möchte 5 zufällige Zeilen 1000 mal probieren und sie in einem Datenrahmen zusammenfassen. Ich habe ein Problem mit der replace = FALSE
und ich frage mich, wo man es auf replace = TRUE
setzen kann.R replizieren Probe Funktion ohne Ersatz
Ich habe einen Datensatz von 5000 Zeilen, die (vereinfacht) wie folgt aussieht:
Fund.ID Vintage Type Region.Focus Net.Multiple Size
[1,] 4716 2003 2 US 1.02 Small
[2,] 2237 1998 25 Europe 0.03 Medium
[3,] 1110 1992 2 Europe 1.84 Medium
[4,] 12122 1997 25 Asia 2.04 Large
[5,] 5721 2006 25 US 0.86 Mega
[6,] 730 1998 2 Europe 0.97 Small
Diese meine Funktion ist, die mit einer zufälligen Reihe beginnt und schließt eine Einschränkung für die 5 Reihen gezogen werden .:
simulate <- function(inv.period) {
start <- sample_n(dataset, 1, replace=TRUE) #draw random first fund
t <- start$Vintage:(start$Vintage + inv.period) #define investment period contingent on first fund
fof <- dataset[sample(which(dataset$Vintage %in% t), 5, replace = FALSE), ] #include constraint, 5 funds in portfolio
}
#replicate this function 1,000 times
#and give out as a data frame with portfolios classified
library(plyr)
library(dplyr)
fof.5 <- rdply(1000, simulate(4))
rename(fof.5, FoF.ID = .n)
Wenn ich ersetzen verwenden = FALSE in der simulieren-Funktion (nach fof < -), bekomme ich diesen Fehler:
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
Der ganze Ausdruck funktioniert, wenn ich ersetzen = TRUE. Dies wäre jedoch nicht korrekt, da eine Zeile im selben Beispiel doppelt gezeichnet werden könnte, was ich nicht möchte.
Gibt es eine Möglichkeit, replace = FALSE zu setzen, wenn Zeilen gezeichnet werden, aber replace = TRUE für den gesamten Datensatz? Es sollte sein: Eine Zeile kann nur einmal innerhalb der Probe gezeichnet werden, kann aber in einer anderen Probe ein anderes Mal gezogen werden.
Wenn Sie eine Funktion aus einem Paket verwenden geben Sie bitte mit 'library (package)' hilft anderen, Ihren Code zu replizieren und Lösungen zu finden. –
Die Funktion 'simulate' gibt keinen Wert zurück. Es wird auch jedes Mal fehlschlagen, wenn die Länge von "t" kleiner als "5" ist. Zum Beispiel, sagen wir, "Start" gibt Zeile 4 aus seinem Beispiel zurück. Dann wird "start $ Vintage" '1997' sein. Nehmen wir an, dass "inv.period" 1 ist. Es werden zwei Werte abgetastet, die Zeilen 2 und 4. Sie verlangen, dass 5 Werte ersatzlos extrahiert werden. Das ergibt keinen Sinn. –
Ich benutze die plyr und dplyr Pakete, wie in der zweiten Code Box angegeben. Es stimmt, dass meine Simulationsfunktion keinen Wert zurückgibt. Das liegt daran, dass ich die replizierte Funktionsausgabe als einen Datenrahmen mit der rdply-Funktion speichere. Da ich einen großen Datensatz (5.000 Zeilen) mit Jahren 1982-2015 habe, sollte Ihr zweiter Punkt nicht zu Problemen führen. – Toto