我有一个R脚本,允许我选择一个样本大小,并采取替换50个单独的随机样本。以下是此代码的示例:
## Creates data frame
df = as.data.table(data)
## Select sample size
sample.size = 5
## Creates Sample 1 (Size 5)
Sample.1<-df[,
Dollars[sample(.N, size=sample.size, replace=TRUE)], by = Num]
Sample.1$Sample <- c("01")
根据上面的R脚本,我首先创建了一个数据框。然后我选择我的样本大小,在这种情况下是5.这只代表一个样本。由于我缺乏R的经验,我再重复这段代码49次。最后一段代码如下所示:
## Creates Sample 50 (Size 5)
Sample.50<-df[,
Dollars[sample(.N, size=sample.size, replace=TRUE)], by = Num]
Sample.50$Sample <- c("50")
样本输出看起来像这样(样本范围1 - 50):
Num Dollars Sample
1 85000 01
1 4900 01
1 18000 01
1 6900 01
1 11000 01
1 8800 50
1 3800 50
1 10400 50
1 2200 50
1 29000 50
应该注意的是,可变的“Num&#39;是为了分组而创建的,对我的整体问题几乎没有影响(发布在下面)。
不是重复这个代码五十次,为了得到五十个单独的样本(大小为5),我可以创建一个循环来帮助我限制代码吗?我最近被要求创建一万个随机样本,每个样本大小为5.我显然不能重复这个代码一万次,所以我需要某种循环。
我的最终输出样本应该如下所示(样本范围1 - 10,000):
Num Dollars Sample
1 85000 01
1 4900 01
1 18000 01
1 6900 01
1 11000 01
1 9900 10000
1 8300 10000
1 10700 10000
1 6800 10000
1 31000 10000
提前感谢大家的帮助,非常感谢。
如果需要,可以使用以下示例代码:
Num Dollars
1 31002
1 13728
1 23526
1 80068
1 86244
1 9330
1 27169
1 13694
1 4781
1 9742
1 20060
1 35230
1 15546
1 7618
1 21604
1 8738
1 5299
1 12081
1 7652
1 16779
答案 0 :(得分:2)
一个非常简单的方法是使用for循环并将结果存储在列表中:
lst <- list()
for(i in seq_len(3)){
lst[[i]] <- df[sample(seq_len(nrow(df)), 5, replace = TRUE),]
lst[[i]]["Sample"] <- i
}
> lst
[[1]]
Num Dollars Sample
20 1 16779 1
1 1 31002 1
12 1 35230 1
14 1 7618 1
14.1 1 7618 1
[[2]]
Num Dollars Sample
9 1 4781 2
13 1 15546 2
12 1 35230 2
17 1 5299 2
12.1 1 35230 2
[[3]]
Num Dollars Sample
1 1 31002 3
7 1 27169 3
17 1 5299 3
5 1 86244 3
6 1 9330 3
然后,要创建单个data.frame,请同时使用do.call
rbind
列表元素:
do.call(rbind, lst)
Num Dollars Sample
20 1 16779 1
1 1 31002 1
12 1 35230 1
14 1 7618 1
14.1 1 7618 1
9 1 4781 2
13 1 15546 2
121 1 35230 2
17 1 5299 2
12.1 1 35230 2
11 1 31002 3
7 1 27169 3
171 1 5299 3
5 1 86244 3
6 1 9330 3
答案 1 :(得分:1)
值得注意的是,如果您使用替换对进行采样,则绘制50(或10,000)个大小为5的样本相当于绘制一个大小为250的样本(或50,000)。因此,我会这样做(你会看到我从@ beginneR的答案中偷走了一行):
df = as.data.table(data)
## Select sample size
sample.size = 5
n.samples = 10000
# Sample and assign groups
draws <- df[sample(seq_len(nrow(df)), sample.size * n.samples, replace = TRUE), ]
draws[, Sample := rep(1:n.samples, each = sample.size)]