在R中生成指定长度的随机样本数

时间:2017-06-08 18:57:09

标签: r loops random

我认为这是我对R的了解不足,特别是对循环相关代码知之甚少。

这是我想要做的。假设我有1到500的数字。首先,从1到500生成300组随机挑选的两个数字,为​​每组分配1到300之间的数字,然后将它们组合成一个数据集,让它成为数据集A. / p>

所以A看起来像

A_no  random_num
1       26
1       256
2       3
2      113
...

然后我需要创建一个数据集B,其中我将有500个中的3个随机数的集合,也计算在内

B_no  random_num
1       16
1       113
1       4
2       67
2       25
2       7

我相信R代码看起来非常优雅和简单。非常感谢您对此解决方案的任何帮助。

2 个答案:

答案 0 :(得分:0)

这有点简化,利用所有随机选取的数字将是独立的(假定的)事实。

df1 <- data.frame(A_no=rep(1:500,each=2), random_num=sample(1:300,2*500,replace=T))
head(df1)
##   A_no random_num
## 1    1        249
## 2    1        117
## 3    2        108
## 4    2         44
## 5    3        138
## 6    3        247

dim(df1)
## [1] 1000   2

df2 <- data.frame(A_no=rep(1:500,each=3), random_num=sample(1:300,3*500,replace=T))
head(df2)
##   A_no random_num
## 1    1        276
## 2    1         50
## 3    1        237
## 4    2        153
## 5    2        225
## 6    2          4

dim(df2)
## [1] 1500   2

答案 1 :(得分:0)

# Set random seed
set.seed(83)
# Generate sequence
z <- seq(1, 300)
# Generate first sample
x <- sample(1:500, 300)
# Combine
zx <- data.frame(z, x)
# Set seed again
set.seed(82)
# Generate second sample
x <- sample(1:500, 300)
# Combine
zy <- data.frame(z, x)
xyz <- rbind(zx, zy)

或者你可以这样做

# Set random seed
set.seed(83)
# Generate sequence
B_no <- seq(1, 300)
# Generate first sample
x <- sample(1:500, 300)
y <- sample(1:500, 300)
z <- sample(1:500, 300)

wide <- data.frame(B_no, x, y, z)

library(reshape2)
B <- melt(wide, id.vars = c("B_no"))
Bx <- B[order(B$B_no),]