关于顺序采样过程中的随机数生成

时间:2012-01-22 16:59:45

标签: r

我有一个数据列表,比如

12345
23456
67891
-20000
200
600
20
...

假设此数据集(即文件行)的大小为N.我想从该数据文件中随机绘制m行并将其输出到一个文件中,并将剩余的N-m行放入另一个数据文件中。我可以随机绘制m次迭代的索引来获得那些m行。令我困惑的问题是如何确保随机抽取的m行都不同?

在R中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

是的,使用sample(N, size=m, replace=FALSE)从N中随机抽取一个m而无需替换。或者只是sample(N, m),因为replace=FALSE是默认值。

答案 1 :(得分:3)

我不完全确定我理解这个问题,但是这里有一种方法可以在不替换矢量的情况下进行采样,然后根据采样将该矢量分成两部分。这可以很容易地扩展到其他数据类型(例如,data.frame)。

## Example data vector.
X <- c(12345, 23456, 67891, -20000, 200, 600, 20)

## Length of data.
N <- length(X)

## Sample from the data indices, without replacement.
sampled.idx <- sample(1:N, 2, replace=FALSE)

## Select the sampled data elements.
(sampled <- X[sampled.idx])

## Select the non-sampled data elements.
(rest <- X[!(1:N %in% sampled.idx)])

## Update: A better way to do the last step.
## Thanks to @PLapointe's comment below.
(rest <- X[-sampled.idx])