我有一个数据帧,这是一个运行历史.一些变量包括日期(在POSIXct中)和该运行的值(此处=大小).我想生成各种图表,显示基于特定日期范围的大小列总数的行.理想情况下,我想使用相同的数据集,并从每周,2周,每月季度的总数进行更改.
这是一个示例数据集;
require(ggplot2)
set.seed(666)
seq(Sys.time()-(365*24*60*60), Sys.time(), by="day")
foo<-data.frame(Date=sample(seq(today-(365*24*60*60), today, by="day"),50, replace=FALSE),
value=rnorm(50, mean=100, sd=25),
type=sample(c("Red", "Blue", "Green"), 50, replace=TRUE))
Run Code Online (Sandbox Code Playgroud)
我可以创建这个显示个人价值的情节;
ggplot(data=foo, aes(x=Date, y=value, colour=type))+stat_summary(fun.y=sum, geom="line")
Run Code Online (Sandbox Code Playgroud)
或者我可以这样做以显示每月的金额;
ggplot(data=foo, aes(x=format(Date, "%m %y"), y=value, colour=type))+stat_summary(fun.y=sum, geom="line", aes(group=type))
Run Code Online (Sandbox Code Playgroud)
然而,每季度/ 2周总和会变得更复杂.理想情况下,我喜欢像stat_bin和stat_summary这样的东西,所以我可以指定一个binwidth(或者让ggplot根据范围进行最佳猜测)
我错过了一些明显的东西,或者这是不可能的?
had*_*ley 10
使用plyr和lubridate自行完成所有计算非常容易:
library(plyr)
library(lubridate)
foo <- data.frame(
date = sample(today() + days(1:365), 50, replace = FALSE),
value = rnorm(50, mean = 100, sd = 25),
type = sample(c("Red", "Blue", "Green"), 50, replace = TRUE))
foo$date2 <- floor_date(foo$date2, "week")
foosum <- ddply(foo, c("date2", "type"), summarise,
n = length(value),
mean = mean(value))
ggplot(foosum, aes(date2, mean, colour = type)) +
geom_point(aes(size = n)) +
geom_line()
Run Code Online (Sandbox Code Playgroud)