【问题标题】:Generate number of random sample of specified length in R在R中生成指定长度的随机样本数
【发布时间】:2017-06-08 18:57:08
【问题描述】:

我认为这是我对 R 的了解不足,尤其是对循环相关的代码了解不足。

这就是我想要做的。假设我有从 1 到 500 的数字。首先,生成 300 组从 1 到 500 的两个随机选择的数字,为每组分配一个从 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 代码看起来会非常优雅和简单。非常感谢有关此解决方案的任何帮助。

【问题讨论】:

  • 我很困惑……随机数在 1 到 300 之间还是在 1 到 500 之间?每个有 300 个,还是每个有 500 个?还是我误解了这个问题?
  • 我总共有 500 个数字,需要生成 300 个随机样本。

标签: r loops random


【解决方案1】:

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

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

【讨论】:

  • 马特,这个可能更好。我会玩两个输出。我想最后一个会更好地处理大量随机数。非常感谢您的帮助。
【解决方案2】:
# 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),]

【讨论】:

  • 谢谢!当我尝试编写两个故事功能时得到了您的答案。当然应该就这么简单。我只需要分配计数,因为结果数据具有分配给每个随机数的唯一值,从 1 到 600。但我会弄清楚其余的。谢谢!!!
  • 很高兴它成功了。如果您对答案感到满意,您应该考虑将复选标记标记为绿色以关闭问题。
  • 第二个版本是真正的美女。完美运行。我不知道 reshape2 库,似乎非常有用。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 2018-06-19
  • 2020-12-30
  • 2020-02-07
相关资源
最近更新 更多