2

私は2000人の個人からなるデータセットを持っています。各個体 についてi:2000、データセットにはn繰り返される状況が含まれています。dこのデータ セットを で表すと、 の各行はおよびでdインデックス付けされます。他の変数の中でも、異なる (状況) 行にわたって個人に対して同一の値を取る 変数があります。indpid


データのパネルの性質を考慮して、d(ブートストラップのように) 再サンプリングしたい:

  • 交換で、
  • 各再サンプル データをデータ フレームとして保存する

機能の使用を検討しましたが、sample機能させることができませんでした。私は r の新しいユーザーであり、プログラミングのスキルはありません。

データセットは多くの変数で構成されていますが、すべての変数に数値が含まれています。データセットは以下の通りです。

    pid x   y   z
     1  10  2   -5
     1  12  3   -4.5
     1  14  4   -4
     1  16  5   -3.5
     1  18  6   -3
     1  20  7   -2.5
     2  22  8   -2
     2  24  9   -1.5
     2  26  10  -1
     2  28  11  -0.5
     2  30  12  0
     2  32  13  0.5

最初の 6 行は 1 人目の人のためのものpid=1で、その次の性別の行pid=2は 2 人目の人の異なる観測値です。

4

1 に答える 1

0

これはあなたのために働くはずです:

z <- replicate(100,
               d[d$pid %in% sample(unique(d$pid), 2000, replace=TRUE),],
               simplify = FALSE)

結果zは、何でもできるデータフレームのリストになります。

編集:これは少し冗長ですが、重複した行を処理します。replicateセット操作を指定された回数 (以下の例では 4 回) 実行するという明白な用途があります。次にsample、の一意の値pid(この場合は、これらの値の 3 つを置換して) を抽出し、dサンプリングされた各値に対応する の行を抽出します。上記のコードでは適切に処理されない重複をdo.calltorbindとdealの組み合わせで処理します。lapplyしたがって、潜在的に異なる長さのデータフレームを生成する代わりに、このコードは、サンプリングされた各データフレームを生成し、pidを使用do.call("rbind",...)して、 の各反復内でそれらを一緒に貼り付けますreplicate

z <- replicate(4, do.call("rbind", lapply(sample(unique(d$pid),3,replace=TRUE),
                                     function(x) d[d$pid==x,])),
                                     simplify=FALSE)
于 2013-06-24T16:35:18.650 に答える