6

私はRでプログラミングしています。たとえば、1000個の値を含むベクトルがあります。ここで、これらの1000個の値をランダムに2つの新しいセットに分割したいとします。1つは400の値を含み、もう1つは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が本当にベクトルの場合、1つのオプションは次のようになります。

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