如何有效地处理几个子组上的多个函数?

时间:2013-10-10 09:24:31

标签: r function extract

我是新手使用R :)我试图1)从数据库中提取27个子组(由3列g1,g2,g3确定)和2)绘制Hist图表然后3)计算0.05分位数为每个小组。我现在所做的是使用以下代码逐个执行该过程,但效率不高。有谁知道一些更好的解决方案吗?任何帮助将非常感谢!

我的一些代码:

g111<-residQ_grouped[residQ_grouped$g1==1&residQ_grouped$g2==1&residQ_grouped$g3==1,]  
g112<-residQ_grouped[residQ_grouped$g1==1&residQ_grouped$g2==1&residQ_grouped$g3==2,]                                                                                                    
until to(27 times)  
g333<-residQ_grouped[residQ_grouped$g1==3&residQ_grouped$g2==3&residQ_grouped$g3==3,]

对于我做的情节:
        再次hist(g111$value,breaks=300,freq=T,border=F,col="lightblue",xlim=c(-0.3,0.3),...)我需要手动执行27次。

和0.05分位数相同:

Quant_g111  <-  quantile(g111$tau0.50,0.05)  
Quant_g112  <-  quantile(g112$tau0.50,0.05)  
Quant_g113  <-  quantile(g113$tau0.50,0.05)

... 27次

下面的

是数据库结构的一个例子:

Value   g1  g2  g3    
1   1   1   1  
2   1   1   2  
1   1   1   3  
9   1   2   1  
6   1   2   2  
2   1   2   3  
4   1   3   1  
7   1   3   2  
9   1   3   3  
2   2   1   1  
3   2   1   2  
6   2   1   3  
8   2   2   1  
1   2   2   2  
9   2   2   3  
2   2   3   1  
8   2   3   2  
8   2   3   3  
3   3   1   1  
8   3   1   2  
1   3   1   3  
5   3   2   1  
3   3   2   2  
5   3   2   3  
5   3   3   1  
4   3   3   2  
8   3   3   3  

.....

1 个答案:

答案 0 :(得分:3)

这就是我可能做的事情(我将坚决抵制在我的工作区中创建27 * 3个对象):

 g.grouped <- split(residQ_grouped, interaction(residQ_grouped[, 2:4]) )
 # For testing I created an expanded dataset
 residQ_grouped <- cbind(residQ_grouped , tau=rnorm(27*10))

这将创建一个27页的直方图包。 (您可以考虑使用layout将9放在页面上。)

 pdf("quant_output.pdf", onefile=TRUE)
   lapply(names(g.grouped), function(x){ hist(g.grouped[[x]]$tau, 
          main=bquote(Histgram~of~.(x)), breaks=5, freq=T, border=F, 
          col="lightblue", xlim=c(-3,3) ) } )
 dev.off()

据推测,'tau'栏目在那里,虽然目前尚不清楚。假设它是同一数据帧中的一列,那么:

 g.quans <- lapply( lapply(g.grouped, "[[", "tau") , # first extract the columns
                    quantile, 0.05)                # then calculate the quantiles