2017-04-05 11 views
3

I持っている主題ごとに2回の観測では、次のデータ:私はベクトルであるSUBJECT番号を持っているデータの行をしたいサブセットデータを繰り返し観察とベクトルに基づいて

SUBJECT <- c(8,8,10,10,11,11,15,15) 
POSITION <- c("H","L","H","L","H","L","H","L") 
TIME <- c(90,90,30,30,30,30,90,90) 
RESPONSE <- c(5.6,5.2,0,0,4.8,4.9,1.2,.9) 

DATA <- data.frame(SUBJECT,POSITION,TIME,RESPONSE) 

、V:

V <- c(8,10,10) 

どのようにして、SUBJECTの数値がVであるDATAからの観測値を取得できますか?また、それらの観測値が、対応するSUBJECTの数値がVに表示される回数と同じ回数繰り返されますか?

望ましい結果:

SUBJECT <- c(8,8,10,10,10,10) 
POSITION <- c("H","L","H","L","H","L") 
TIME <- c(90,90,30,30,30,30) 
RESPONSE <- c(5.6,5.2,0,0,0,0) 

OUT <- data.frame(SUBJECT,POSITION,TIME,RESPONSE) 

被験者数がVに2回表示されていても、私は%演算子における%のいくつかのバリエーションがトリックを行うだろうと思ったけど、それはVの繰り返し対象の数字を考慮していません私は、DATAに対応する行のコピーを1つだけ取得します。

ループを作成して一致する観測を追加することもできますが、この部分はブートストラップサンプラーの内側にあり、このオプションを使用すると計算時間が大幅に増加します。

+1

同じデータを保持している状態でデータをブートストラップする場合は、 'setDT(DATA);のようにサブセットに高速に結合するdata.tableを使用することをお勧めします。 setindex(DATA、SUBJECT); DATA [。(v)、on = "SUBJECT"] ' – Frank

+0

@Frankコードを実行できません。 'setindex()'は次のエラーを引き起こします:_Error:関数 "setindex" _が見つかりませんでした。私はこれが 'data.table'ライブラリの一部であると仮定していますか、間違っていますか? – Poca

+0

はい、そうです。 data.tableのバージョンが1年ほどで更新されていない場合は、代わりに 'set2key'が必要です。 (変更された関数の名前はすべてです。) – Frank

答えて

5

mergeはあなたの友達です:

merge(list(SUBJECT=V), DATA) 
# SUBJECT POSITION TIME RESPONSE 
#1  8  H 90  5.6 
#2  8  L 90  5.2 
#3  10  H 30  0.0 
#4  10  L 30  0.0 
#5  10  H 30  0.0 
#6  10  L 30  0.0 

@Frankが示すように、このロジックはdata.tableまたはdplyrまたは左の参加を処理する何か他のsqlに変換することができます。

関連する問題