我有一个数据列表,比如
12345
23456
67891
-20000
200
600
20
...
假设此数据集(即文件行)的大小为N.我想从该数据文件中随机绘制m行并将其输出到一个文件中,并将剩余的N-m行放入另一个数据文件中。我可以随机绘制m次迭代的索引来获得那些m行。令我困惑的问题是如何确保随机抽取的m行都不同?
在R中有没有办法做到这一点?
答案 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])