gpt4 book ai didi

r - 是否可以按日期获取 'bin' 值以在 ggplot2 和 R 中获得每 2 周的总数?

转载 作者:行者123 更新时间:2023-12-04 17:12:59 28 4
gpt4 key购买 nike

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

我可以创建这个显示单个值的图;
ggplot(data=foo, aes(x=Date, y=value, colour=type))+stat_summary(fun.y=sum, geom="line")

或者我可以这样做以显示每月的总和;
ggplot(data=foo, aes(x=format(Date, "%m %y"), y=value, colour=type))+stat_summary(fun.y=sum, geom="line", aes(group=type))

然而,每季度/2 周等的总和变得更加复杂。理想情况下,我想要像 stat_bin 和 stat_summary 这样的组合,这样我就可以指定一个 binwidth (或者让 ggplot 根据范围做出最佳猜测)

我是否遗漏了一些明显的东西,或者这是不可能的?

最佳答案

使用 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()

关于r - 是否可以按日期获取 'bin' 值以在 ggplot2 和 R 中获得每 2 周的总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4762969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com