大文字と小文字の制御対象を持つ巨大なデータフレームがあります。一致する場合:制御は1:3です。私はケースIDを再サンプリングし、対応するコントロールを抽出しようとしています。同じ行/ idsをrで繰り返しサブセット化する方法
したがって、IDのベクトルがあり、IDを繰り返し使用できます。私はベクトルの各idのためのケースとコントロールのデータを抽出したいと思います。ケースと一致するコントロールは同じcase_numを持ちます。 %in%は常にデータから一意のIDを取ります。私はそれを行うためにllplyを使用しました。約2.5秒かかります。他の効率的な方法はありますか?
私は簡単な例と質問に私の解決策を含めています。
私の場合、1921年のidベクトルの長さは、関数は1921回コントロールを抽出する必要があります。時間を1秒でも減らすことができれば、実際には多くのプロセスが繰り返されますが、1000回繰り返されます。ありがとうございました!
test_data=
data.frame(id=c(1,1,2,4,4,5,6),value=c('g','e','r','j','a','b','c'))
test_data
id value
1 1 g
2 1 e
3 2 r
4 4 j
5 4 a
6 5 b
7 6 c
id_vec= c(1,4,1,5)
library(plyr)
newdata.list=llply(id_vec, function(x) test_data[test_data$id==x,])
## or if we make our data a data.table then
library(data.table)
test_data= data.table(test_data)
newdata.list=llply(id_vec, function(x) test_data[id==x])
library(dplyr)
newdata.frame= bind_rows(newdata.list) ### making it a dataframe
newdata.frame
id value
1: 1 g
2: 1 e
3: 4 j
4: 4 a
5: 1 g
6: 1 e
7: 5 b
PLSがテキストとしてではなく、画像などのデータを掲示します。 'dput(your_data)'を使って結果をコピーして貼り付けてください。 – GGamba
編集した後、コメントを取得した後にコードを追加しました。 –
おそらく、plyr + dplyr + data.tableを混ぜないことが最も安全です。 Plyrは本質的にdplyrに置き換えられました。おそらくそれはそうではありません。 – Frank