6

我正在用 R 编程。我有一个包含 1000 个值的向量。现在假设我想将这 1000 个值随机分成两个新集合,一个包含 400 个值,另一个包含 600 个值。我该怎么做?我想过做这样的事情......

firstset <- sample(mydata, size=400)

...但这不会对数据进行分区(换句话说,我仍然不知道将哪些 600 个值放入另一组)。我还考虑过从 1 循环到 400,一次随机删除 1 个值并将其放入firstset. 这将正确划分数据,但我不清楚如何实现这一点。另外,我被告知要for尽可能避免 R 中的循环。

有任何想法吗?

4

3 回答 3

10

您可以对它们的位置进行采样,而不是对值进行采样。

positions <- sample(length(mydata), size=400)  # ucfagls' suggestion
firstset <- mydata[positions]
secondset <- mydata[-positions]

编辑:ucfagls 的建议会更有效(尤其是对于较大的向量),因为它避免了在 R 中分配位置向量。

于 2010-10-12T03:07:01.763 回答
9

只需随机化 mydata 并取前 400 个,然后是最后 600 个。

mydata <- sample(mydata)
firstset <- mydata[1:400]
secondset <- mydata[401:1000]
于 2010-10-12T03:58:20.527 回答
4

如果mydata真的是一个向量,一个选择是:

split(mydata, sample(c(rep("group1", 600), rep("group2", 400))))
于 2010-10-12T03:07:18.323 回答