【发布时间】:2016-05-24 19:34:45
【问题描述】:
我想对 5 个随机行进行 1000 次抽样并将它们汇总到一个数据框中。我对replace = FALSE 有疑问,我想知道将它放在哪里replace = TRUE。
我有一个包含 5,000 行的数据集,看起来(简化)如下:
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
这是我的函数,它从一个随机行开始,并包含对正在绘制的 5 行的约束。:
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)
如果我在模拟函数中使用replace=FALSE(在fof
sample.int(length(x), size, replace, prob) 中的错误: 'replace = FALSE' 时不能抽取大于总体的样本 如果我输入replace = TRUE,整个表达式都有效。但是,这是不正确的,因为在同一个样本中可能会绘制两次行,这是我不希望的。
有没有办法在绘制行时放置replace=FALSE,但为整个数据集放置replace=TRUE?应该是:一行只能在样本中绘制一次,但可以在另一个样本中再次绘制。
【问题讨论】:
-
如果您使用包中的函数,请用
library(package)注明它可以帮助其他人复制您的代码并找到解决方案。 -
函数
simulate不返回任何值。只要t的长度小于5,它也会失败。例如,假设start从其样本中返回第 4 行。那么start$Vintage将是1997。现在假设inv.period是 1。正在采样两个值,第 2 行和第 4 行。您要求提取 5 个值而不进行替换。这没有意义。 -
我正在使用 plyr 和 dplyr 包,如第二个代码框中所示。确实,我的模拟函数没有返回任何值。那是因为我将复制的函数输出存储为带有 rdply 函数的数据帧。由于我有一个 1982-2015 年的大型数据集(5,000 行),因此您提出的第二点应该不会导致问题。
-
fof.5
-
你觉得
sample_n(dataset, 1, replace=TRUE)和sample_n(dataset, 1, replace=FALSE)有什么区别?
标签: r random replace portfolio replicate