2013-06-12 34 views
2

我对R很新,所以请温和。削减数据和访问组以绘制百分比线

我有一个包含时间戳和一些数据的数据集。 现在我想画一张图,其中:

  • 数据按照例如60分钟间隔和
  • 绘制了一些百分比线。

我想有一个图表,时间为x轴,间隙为y轴。 我想象像箱图,但为了更好地概述 - 因为我有一个长的测量 - 而不是箱子,我想有一个连接

  • 均值线,
  • 3百分位,
  • 97个百分位数和
  • 100百分

下面是一个例子的数据:

> head(B, 10) 
         times  gaps 
1 2013-06-10 15:40:02.654168 1.426180 
2 2013-06-10 15:40:18.936882 2.246462 
3 2013-06-10 15:40:35.215668 3.227132 
4 2013-06-10 15:40:48.328785 1.331284 
5 2013-06-10 15:40:53.809485 1.294128 
6 2013-06-10 15:41:04.027745 2.292671 
7 2013-06-10 15:41:25.876519 1.293501 
8 2013-06-10 15:41:42.929280 1.342166 
9 2013-06-10 15:42:11.700626 3.203901 
10 2013-06-10 15:42:23.059550 1.304467 

我可以用切分数据:

C <- table(cut(B, breaks="hour")) 

C <- data.frame(cut(B, breaks="hour")) 

但我怎么能绘制图形的形式呢?我不知道如何获得团体的差距值。否则,我可能

quantile(C$gaps, c(.03, .5, .97, 1)) 

预先感谢任何帮助 拉蒙

回答

2

固体问题。我拉着我的头发,直到我发现this,其中描述了plyr的一个有趣的“特征”。所以这个解决方案利用了ggplot,plyr,reshape2-希望能成为R的一个很好的介绍。如果你需要通过几天添加剪辑,你还可以通过在ddply()中添加一个变量来实现。

library(plyr) 
library(reshape2) 
library(ggplot2) 
Hs <- read.table(
    header=TRUE, text=' 
dates times  gaps 
1 2013-06-10 15:40:02.654168 1.426180 
2 2013-06-10 15:40:18.936882 2.246462 
3 2013-06-10 15:40:35.215668 3.227132 
4 2013-06-10 15:40:48.328785 1.331284 
5 2013-06-10 15:40:53.809485 1.294128 
6 2013-06-10 15:41:04.027745 2.292671 
7 2013-06-10 16:41:25.876519 1.293501 
8 2013-06-10 16:41:42.929280 1.342166 
9 2013-06-10 16:42:11.700626 3.203901 
10 2013-06-10 16:42:23.059550 1.304467') 
Hs$dates <- paste(Hs$date, Hs$times, sep = " ") 
Hs$dates <- strptime(Hs$date, "%Y-%m-%d %H:%M:%S") 
class(Hs$dates) # "POSIXlt" "POSIXt" 
Hs$h1 <- Hs$dates$hour 
Hs$dates <- as.POSIXct(strptime(Hs$date, "%Y-%m-%d %H:%M:%S")) 
class(Hs$dates) # "POSIXct" "POSIXt" 
library(ggplot2) 
ggplot(Hs, aes(factor(h1), gaps)) + 
    geom_boxplot(fill="white", colour="darkgreen") # easy way! Traditional boxplot. 
ggplot(Hs, aes(factor(h1), gaps)) + geom_boxplot() + 
     stat_boxplot(coef = 1.7, fill="white", colour="darkgreen") 

我不知道,如果加入“COEF = 1.7”适用于你 - 如果没有进一步继续通过汇总表创造价值

cuts <- c(.03, .5, .97, 1) 
x <- ddply(Hs, .(h1), function (x) 
{summarise(x, y = quantile(x$gaps, cuts))}) 
x$cuts <- cuts 
x <- dcast(x, h1 ~ cuts, value.var = "y") 
x.melt <- melt(x, id.vars = "h1") 

这里有你所要求的行加另一个箱子情节只是为了好玩。

ggplot(x.melt, aes(x = h1, y = value, color = variable)) + geom_point(size = 5) + 
    geom_line() + scale_colour_brewer(palette="RdYlBu") + xlab("hours") 
ggplot(x, aes(factor(h1), ymin = 0, lower = `0.03`, middle = `0.5`, 
        upper = `0.97`, ymax = `1`)) + 
     geom_boxplot(stat = "identity", fill="white", colour="darkgreen") 

geom_line

custom boxplot

希望这有助于。

+0

精彩回答! – Powderking

+0

还了解了POSIXlt,class(),ddply(),summarize(),我的问题也得到了解答:-)非常感谢! – Powderking