2017-01-25 8 views
2

Rに、私はデータセットを再サンプリングしようとしています。次のように同じコード(ID)のエントリでリサンプリングする

データベースAは、最初の列(整数)と、各列の特性のいくつかのコードを含む:

A <- as.matrix(cbind(floor(runif(1000, 1,101)), matrix(rexp(20000, rate=.1), ncol=20)))

いくつかのコードは、最初の列で繰り返されます。

最初の列からランダムにコードを再サンプリングし、再サンプリングされたコードベクトルの各エントリに対して、私に右手側を与えるように、新しい行列またはデータフレームを作成します。再サンプリングされた同じコードを持つベクトルがさらにある場合は、両方を含める必要があります。また、同じコードを2回リサンプリングすると、同じリサンプルコードを持つAのすべての行が2回表示されます。

--- EDIT ---

リサンプリングは置き換えて行います。これまでのところ、私がやったことです:

res <- resample(unique(A[,1]), size = length(unique(A[,1])) , replace = TRUE, prob= NULL) 
A.new <- A[which(A[,1] %in% res),] 

しかし、Aの2行は同じコード(たとえば2)を持っている、とベクトルres2 4回を選択したことを想定しています。 A.newでは私はこれらの2行は4回

+0

所望の出力にこのリストを凝縮するrbindを使用しては明らかではありません。あなたは交換でサンプリングしようとしていますか?共通の最初の列を共有する複数の行をインクルードしようとしていますか? – manotheshark

+0

@manothesharkありがとうございます。私はもう少し説明を加えました。 – tony

+0

@lmoありがとう、私はこれまでのことを加えました。 – tony

答えて

1

を繰り返した代わりにすることを私たちはこのようにそれを行うことができ、2回(A[,1]2としてコード化された2行があるため)があります:

A.new = sapply(res, function(x) A[A[,1] == x, ]) 
A.new = do.call(rbind, A.new) 

最初行は、それぞれの値がresであるAのサブセットであるリスト項目を作成して、その列の値がresである行列のリストを作成します。 resに同じ番号が複数回含まれている場合は、その値が出現するたびにマトリックスが作成されます。

2行目は、単一行列

+0

こんにちは、行く方法が、私はそれを働かせることができません。あなたはあなたの最後にそれを試しましたか?ありがとうございます – tony

+0

はい、テストされ、それは私のために働いた。あなたのコードには1つのタイプミスがありました。そこには 'resample'があり、' sample'だったはずです。それはあなたの問題でしたか? – dww

+0

ありがとう、私は 'sample'と' resample'の違いはあまり明確ではありません。あなたのコードは、 'sapply'の代わりに、' lapply'を使って自分のデータで正常に動作します!ありがとうございました – tony

関連する問題