2

ここに私の問題があります。

ベクトルがあるとします:

vec <- c("a","b","c","d","e","f")

そして、要素が何か(1から6の間)を取得する場合もあれば、何も取得しない場合もあるが、常に値の合計が6になるように、ベクトルの要素間で6つの値をランダムに分散したい.たとえば、値は次のように分散されます。

3,0,1,0,2,0

このような別の方法で:

1,0,1,1,2,1

など。

Rでこれを行う簡単な方法はありますか?

事前にどうもありがとうございました。

ティナ。

4

1 に答える 1

6

編集:

これは、予想される相対頻度でさまざまなパーティションをほぼ確実に生成するため、より優れています。

as.vector(rmultinom(1, size=length(vec), prob=rep(1, length(vec))))
# [1] 4 0 1 0 1 0

ここで求めている組み合わせオブジェクトは「パーティション」と呼ばれます。partitionsパッケージには、さまざまな種類のパーティションを生成するための便利な関数が多数含まれています。関数の出力を少し調整するだけで、parts()探しているものが得られます。

library(partitions)

## Create a function
randPartition <- function(vec) {
    pp <- parts(length(vec))
    sample(pp[,sample(ncol(pp), 1)])
}

## Try it out a few times
randPartition(vec)
# [1] 1 1 1 1 1 1
randPartition(vec)
# [1] 2 0 0 2 0 2
randPartition(vec)
# [1] 0 0 0 0 0 6
于 2013-04-01T00:18:37.253 に答える