我想在一个图中绘制三个图:上四分位数,中位数和下四分位数。
现在我有这种格式的数据:
t_1 x_1 x_2 ... x_n
t_2 x_1 x_2 ... x_n
... ... ... ... ...
t_m x_1 x_2 ... x_n
即,在m个时间点观察n个。
是否有更适合在R中实现此任务的输入格式?
由于我对R的经验非常有限,我想避免在R中转换数据。我从几个不同的文件中收集它,所以在预处理数据时我非常灵活。 / p>
答案 0 :(得分:5)
在我看来,您希望数据看起来像:
t lq med uq
1 .. .. ..
2 .. .. ..
3 .. .. ..
4 .. .. ..
因此,你拥有它的格式似乎没问题。一旦它在R中,您可以使用apply生成正确的三列:
res.df <- data.frame(t(apply(my.data.frame[,2:ncol(my.data.frame)], 1, quantile,probs=c(.25,.5,.75))))
res.df$t <- my.data.frame[,1]
res.df
X25. X50. X75. t
1 0.028624900 0.031074701 0.037136365 200
2 0.016687651 0.021395864 0.025269186 300
3 0.010939904 0.014344707 0.016897053 400
4 0.007891868 0.009855513 0.011671379 500
5 0.006553960 0.008057315 0.009885929 600
6 0.005831083 0.006755695 0.008090646 700
然后就是情节。
# Sample data
t=seq(33)
lq=runif(33)
med = lq+runif(33)*2
res.df <- data.frame( t=t, lq=lq, med = med, uq=med+runif(33)*2 )
colnames(res.df) <- c("t","lq","med","uq")
# Base graphics
plot(lq~t,data=res.df,type="l",col="springgreen",ylim=range(c(lq,uq)))
lines(med~t,data=res.df,col="steelblue")
lines(uq~t,data=res.df,col="springgreen")
# ggplot2
res.df <- melt(res.df,id.vars="t")
library(ggplot2)
p <- ggplot(res.df, aes(y=value,x=t,colour=variable) )
p + geom_line()