2017-01-24 6 views
0

関連する2列の値(いくつかのsiterグループの多様化率)をサンプルしようとしましたが、どうやってそれを行うのか分かりません。私はsampleの機能を試していますが、それ以上の条件を選択することはできません。2列のサンプル変数R

 H M M.1 M.2 M.3 
1 0.06 0.06 0.06 0.06 0.06 
2 0.08 0.14 0.14 0.14 0.14 
3 0.04 0.05 0.05 0.05 0.05 
4 0.05 0.07 0.07 0.07 0.07 
... 

しかし、私は、各行からのサンプルのみ1つの値にそれをしたい、と同じ状態になるまでに次の行に移動します。私は、このコマンドを使用すると

df<-data.frame("M"=c(0.06,0.14,0.05,0.07), "H"=c(0.06,0.08,0.04,0.05)) 
    df 
#  M H 
# 1 0.06 0.06 
# 2 0.14 0.08 
# 3 0.05 0.04 
# 4 0.07 0.05 

    sample(df,size=1000,replace=TRUE) 

、それは行と列をリサンプリング行の終わり。最後に、それ以上行がない場合は、size=1000まですべてを再開する必要があります。長さ1000のベクトルを持つことができます。

私が望むものの例(r =行c =列):0.06(r1c1 )、0.14(R2C1)、0.05(R3C1)、0.05(r4c2)、0.06(R1C2)、0.14(R2C1)、0.03(R3C2)、0.07(r4c1)など。

ありがとうございました!

編集:

を、私は私が探していますが、ループ機能のようなものであると思いますが、私はまだどのように行うのか分かりません。

答えて

3

まず、2つの列(行インデックスと列インデックス)のインデックス行列を作成し、元の行列にインデックスを付ける必要があります。

idx <- matrix(c(rep(1:4,250), sample(1:2, 1000, replace=T)), ncol=2) 
res <- as.matrix(df)[idx] 
0

カスタム関数を使用する必要があります。ここで

はそれを行うための一つの小さな方法です:

myfunc <- function(dataframe, nsamples = 1000){ 
    rows = ((0:nsamples)%%nrow(df)) + 1 #use the %% to get the row to sample 
    cols = sample(ncol(df), nsamples, replace = TRUE) #and the cols 
    sapply(1:nsamples, function(x){df[rows[x],cols[x]]}) #sapply to get as a vector 
} 
myfunc(df,10) 
[1] 0.08 0.05 0.07 0.06 0.08 0.05 0.05 0.06 0.08 0.05