是否可以按日期"bin"值以获得ggplot2和R中每2周的总数?

Pau*_*yuk 5 r ggplot2

我有一个数据帧,这是一个运行历史.一些变量包括日期(在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)