★ データをランダムに抽出する方法 ★

7862. データをランダムに抽出する方法 波音 2005/10/06 (木) 22:43
└7863. Re: データをランダムに抽出する方法 青木繁伸 2005/10/06 (木) 23:03
 └7864. Re^2: データをランダムに抽出する方法 波音 2005/10/06 (木) 23:54
  └7865. Re^3: データをランダムに抽出する方法 青木繁伸 2005/10/07 (金) 13:21
   └7866. Re^4: データをランダムに抽出する方法 前川 2005/10/07 (金) 15:53
    └7867. Re^5: データをランダムに抽出する方法 ひの 2005/10/07 (金) 17:01
     └7909. Re^6: データをランダムに抽出する方法 前川 2005/10/11 (火) 12:41


7862. データをランダムに抽出する方法 波音  2005/10/06 (木) 22:43
 例えばxに以下のような50個のデータが代入されている場合に,下のデータ群からランダムに10個のデータを抽出するようなことはRでできますか?

6 7 6 6 6 7 6 7 7 6 7 7 9 7 8 5 6 5 6 7 10 7 7 6 6 6 4 5 6 7 8 9 3 8 8 9 6 7 6 6 8 7 3 9 10 10 9 10 10 9

     [このページのトップへ]


7863. Re: データをランダムに抽出する方法 青木繁伸  2005/10/06 (木) 23:03
> Rでできますか?

できます。
関数の形にしておきますが,
sampling <- function(x, n)
{
return(x[order(runif(length(x)))][1:n])
}
x <- 1:50
sampling(x, 10)

方針は,同じ長さの一様乱数を発生し,その大きさの順序で対象ベクトルの要素を並べ替え,先頭から必要個数取り出してかえすということ。
このやり方で,並べ替えたベクトル全体を返しておけば,先頭から何個でもとれる。必要なら追加してとれる。
> sampling(x, 5)
[1] 4 47 12 32 33
> sampling(x, 10)
[1] 16 47 13 44 21 29 24 48 28 26

もう一つ
sampling <- function(x, n)
{
return(x[sample(1:length(x), n)])
}
x <- 1:50
sampling(x, 10)

方針は,1からxの長さまでの連続整数値から,無作為にn個サンプルして,それを添え字としてxの要素を取り出して返す。
> sampling(x, 10)
[1] 13 44 4 42 26 47 11 45 14 6
> sampling(x,5)
[1] 48 33 3 32 43

そのほかにも色々考えられるでしょうね。

     [このページのトップへ]


7864. Re^2: データをランダムに抽出する方法 波音  2005/10/06 (木) 23:54
データに番号をつけてやって,ソートしてから取り出すというようにしてあげればよかったのですね。言われれば「なるほど」ですが気づきもしませんでした。参考にしていろいろ試してみます。ありがとうございました。

     [このページのトップへ]


7865. Re^3: データをランダムに抽出する方法 青木繁伸  2005/10/07 (金) 13:21
備え付けの関数 sample のパラメータ指定で,

sample(x, n)
もしくは
sample(x)
だけで良かったですね

     [このページのトップへ]


7866. Re^4: データをランダムに抽出する方法 前川  2005/10/07 (金) 15:53
横からすみません。

エクセルのデータで同様に任意の個数のデータをランダム抽出したいのですが,いい方法はないでしょうか?
RAND関数などでは重複して抽出される番号がありうまく行きません。

     [このページのトップへ]


7867. Re^5: データをランダムに抽出する方法 ひの  2005/10/07 (金) 17:01
> エクセルのデータで同様に任意の個数のデータをランダム抽出したいのですが,いい方法はないでしょうか?
> RAND関数などでは重複して抽出される番号がありうまく行きません。

#7863に示された方法が使えます。乱数でデータ番号を抽出するのではなく,ランダムな並べ替えを行ってから必要な個数のデータを抽出します。ランダムな並べ替えを行うには各データに乱数を割り当てて,その乱数をキーにしてソートします。
 ランダムな並べ替えを行うアルゴリズムにはソートを使うより高速な方法がありますが,ソートを組み込み関数として持っているインタプリタの場合は上記の方法のほうが速いのではないかと思います。

     [このページのトップへ]


7909. Re^6: データをランダムに抽出する方法 前川  2005/10/11 (火) 12:41
ひのさん
ありがとうございました。データ数が多いので,どうやって乱数を割り当てていくかは問題ですが,解決しました! がんばってみます

     [このページのトップへ]


● 「統計学関連なんでもあり」の過去ログ--- 035 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る