【发布时间】:2011-03-14 20:02:38
【问题描述】:
我有一个名为“d”的 data.frame,大约有 1,300,000 行和 4 列,另一个名为“gc”的 data.frame 有大约 12,000 行和 2 列(但请参阅下面的较小示例)。
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
我想通过合并“gc”中与“d”的第 1 列匹配的数据,将第 5 列添加到“d”。目前我正在使用 sapply。
d$chr <- sapply( 1:nrow(d), function(x) gc[ gc$gene==d[x,1], ]$chr )
但在真实数据上,它需要“非常长”的时间(我正在运行带有“system.time()”的命令,因为超过 30 分钟,它仍然没有完成)。
你知道我可以如何巧妙地重写这个吗?或者我应该考虑使用 plyr,也许使用“并行”选项(我的计算机上有四个内核)?在这种情况下,最好的语法是什么?
提前致谢。
【问题讨论】:
标签: performance r plyr sapply