从间隔生成一组随机唯一整数

时间:2013-07-21 13:56:38

标签: r

我正在尝试构建一些机器学习模型,

所以我需要一个训练数据和一个验证数据

所以假设我有N个例子,我想在数据框中选择随机x个例子。

例如,假设我有100个例子,我需要10个随机数,是否有办法(有效地)生成10个随机INTEGER数字,以便从我的样本数据中提取训练数据?

我尝试使用while循环,并慢慢更改重复的数字,但运行时间不是很理想,所以我正在寻找一种更有效的方法来实现它。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:29)

sample(或sample.int)执行此操作:

sample.int(100, 10)
# [1] 58 83 54 68 53  4 71 11 75 90

将从1-100范围内生成10个随机数。您可能需要replace = TRUE,其中包含替换样本:

sample.int(20, 10, replace = TRUE)
# [1] 10  2 11 13  9  9  3 13  3 17

更一般地说,sample从任意值的矢量中观察n个观测值。

答案 1 :(得分:1)

如果我理解正确,您正在尝试创建一个保留采样。这通常使用概率来完成。因此,如果您有n.rows个样本,并希望将一小部分training.fraction用于培训,您可以执行以下操作:

select.training <- runif(n=n.rows) < training.fraction
data.training <- my.data[select.training, ]
data.testing <- my.data[!select.training, ]

如果您想指定训练案例的确切数量,您可以执行以下操作:

indices.training <- sample(x=seq(n.rows), size=training.size, replace=FALSE) #replace=FALSE makes sure the indices are unique
data.training <- my.data[indices.training, ]
data.testing <- my.data[-indices.training, ] #note that index negation means "take everything except for those"

答案 2 :(得分:0)

来自raster包:

raster::sampleInt(242, 10, replace = FALSE)
##  95 230 148 183  38  98 137 110 188  39

如果限制太大,可能会失败:

sample.int(1e+12, 10)