我认为这是我对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代码看起来非常优雅和简单。非常感谢您对此解决方案的任何帮助。
答案 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),]