我是新手使用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
.....
答案 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