Как мне отформатировать мои данные до того, как они начнут понимать этот график? - PullRequest
2 голосов
/ 27 июля 2011

Я хочу построить три графика на одном графике: верхний квартиль, медиана и нижний квартиль во времени.

Прямо сейчас у меня есть данные в этом формате:

t_1 x_1 x_2 ... x_n
t_2 x_1 x_2 ... x_n
... ... ... ... ...
t_m x_1 x_2 ... x_n

То есть n наблюдений в m моментах времени.

Есть ли входной формат, более подходящий дляреализовать эту задачу в R?

Поскольку мой опыт работы с R очень ограничен, я бы хотел избежать преобразования данных в R. Я собираю их из пары разных файлов, поэтому я достаточно гибоккогда дело доходит до предварительной обработки данных.

1 Ответ

5 голосов
/ 27 июля 2011

Мне кажется, вы хотите, чтобы ваши данные выглядели так:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...