1

我是使用 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  

......

4

1 回答 1

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
于 2013-10-10T09:37:40.537 回答