在实现此情节之前,我应该如何格式化数据?

时间:2011-07-27 17:50:31

标签: r plot

我想在一个图中绘制三个图:上四分位数,中位数和下四分位数。

现在我有这种格式的数据:

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>

1 个答案:

答案 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")

base graphics

# 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()

ggplot2 graphics