〜1,300,000行と4列の「d」という名前のdata.frameと、〜12,000行と2列の「gc」という名前の別のdata.frameがあります(ただし、以下の小さな例を参照してください)。
d <- data.frame( gene=rep(c("a","b","c"),4), val=rnorm(12), ind=c( rep(rep("i1",3),2), rep(rep("i2",3),2) ), exp=c( rep("e1",3), rep("e2",3), rep("e1",3), rep("e2",3) ) )
gc <- data.frame( gene=c("a","b","c"), chr=c("c1","c2","c3") )
「d」は次のようになります。
gene val ind exp
1 a 1.38711902 i1 e1
2 b -0.25578496 i1 e1
3 c 0.49331256 i1 e1
4 a -1.38015272 i1 e2
5 b 1.46779219 i1 e2
6 c -0.84946320 i1 e2
7 a 0.01188061 i2 e1
8 b -0.13225808 i2 e1
9 c 0.16508404 i2 e1
10 a 0.70949804 i2 e2
11 b -0.64950167 i2 e2
12 c 0.12472479 i2 e2
そして、ここに「gc」があります:
gene chr
1 a c1
2 b c2
3 c c3
「d」の 1 列目と一致する「gc」のデータを組み込むことで、「d」に 5 列目を追加したいと考えています。今のところ私はsapplyを使用しています。
d$chr <- sapply( 1:nrow(d), function(x) gc[ gc$gene==d[x,1], ]$chr )
しかし、実際のデータでは、「非常に長い」時間がかかります(30分以上「system.time()」でコマンドを実行していますが、まだ完了していません)。
これを巧妙な方法で書き直す方法について何か考えがありますか? または、おそらく「並列」オプションを使用してplyrの使用を検討する必要がありますか (コンピューターに 4 つのコアがあります)。このような場合、最適な構文は何でしょうか?
前もって感謝します。