3

以前、データフレームから郵便番号のランダム サンプルを取得しましたが、すべての上位レベルの統計単位でサンプリングしていないことに気付きました。私は約 100 万の郵便番号と 7000 の中間出力統計単位を持っています。サンプルには、各統計単位からほぼ同じ数の郵便番号が含まれている必要があります。

上位レベルの各統計ユニットから 35 個の郵便番号をランダムにサンプリングするにはどうすればよいですか?

以前に次のコードを使用して、250,000 の郵便番号をランダムにサンプリングしました。

total.sample <- total[sample(1:nrow(total), 250000,
                           replace=FALSE),] 

別の列変数 (たとえば、上位レベルの統計単位 (以下のデータフレーム構造の msoa.rank を参照) など) に基づいて郵便番号のランダム サンプル クォータを指定するにはどうすればよいですか?

データベース構造:

'data.frame':   1096289 obs. of  25 variables:
$ pcd                : Factor w/ 986055 levels "AL100AB","AL100AD",..: 282268 282258 
$ mbps2              : int  0 1 0 0 0 1 0 0 0 0 ...
$ averagesp          : num  16 7.8 7.8 9.5 9.4 3.2 11.1 19.4 10.5 11.8 ...
$ mediansp           : num  18.2 8 7.8 8.1 8.5 3.2 8.1 18.7 9.7 8.9 ...
$ nga                : int  0 0 0 0 0 0 0 0 0 0 ...
$ x                  : int  533432 532192 533416 533223 532866 531394 532899 532744 
$ total.dps          : int  11 91 10 7 9 10 3 5 21 12 ...
$ connections.density: num  7.909 0.747 3.1 7.714 1.889 ...
$ urban              : int  1 1 1 1 1 1 1 1 1 1 ...
$ gross.pay          : num  36607 36607 36607 36607 36607 ...
$ p.tert             : num  98.8 98.8 98.8 98.8 98.8 ...
$ p.kibs             : num  70.3 70.3 70.3 70.3 70.3 ...
$ density            : num  25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 ...
$ p_m_s              : num  93.5 93.5 93.5 93.5 93.5 ...
$ p_m_l              : num  6.52 6.52 6.52 6.52 6.52 ...
$ p.edu              : num  62.6 62.6 62.6 62.6 62.6 ...
$ p.claim            : num  1.58 1.58 1.58 1.58 1.58 ...
$ p.non.white        : num  21.4 21.4 21.4 21.4 21.4 21.4 21.4 21.4 21.4 21.4 ...
$ msoa.rank          : int  2 2 2 2 2 2 2 2 2 2 ...
$ oslaua.rank        : int  321 321 321 321 321 321 321 321 321 321 ...
$ nuts2.rank         : int  22 22 22 22 22 22 22 22 22 22 ...
$ gor.rank           : int  8 8 8 8 8 8 8 8 8 8 ...
$ cons               : int  1 1 1 1 1 1 1 1 1 1 ...

pcd = 郵便番号

msoa.rank = 各中間生産統計単位の順序変数

4

2 に答える 2

4

これは簡単で、すぐに修正されることを願っていますdplyr(ありがとう、@Henrik!)

library(dplyr)
yourSample <- yourData %>%
    group_by(msoa.rank) %>%
    sample_n(size = 35) # currently buggy

それまでは、回避策があります (@beginneR に感謝)。

yourSample <- yourData %>%
    group_by(msoa.rank) %>%
    do(sample_n(., size = 35))

または、グループ化のために普通の古いものに固執しplyrます。

library(plyr)
yourSample <- ddply(yourData, "msoa.rank", .fun = function(x) {sample_n(x, size = 35)})
于 2014-06-30T22:49:24.857 に答える