从具有 R 标准格式日期/时间的大型数据集中计算平均每日值?

Pat*_*tty 5 time datetime average r dataframe

我有一个大约 1000 万行的数据框,跨越大约 570 天。使用 striptime 转换日期和时间后,数据如下所示:

          date          X1   
1 2004-01-01 07:43:00 1.2587 
2 2004-01-01 07:47:52 1.2585
3 2004-01-01 17:46:14 1.2586 
4 2004-01-01 17:56:08 1.2585
5 2004-01-01 17:56:15 1.2585 
Run Code Online (Sandbox Code Playgroud)

我想计算每一天的平均值(如一年中的几天,而不是一周中的几天),然后绘制它们。例如。获取所有日期为“2004-01-01”的行,计算平均价格,然后对“2004-01-2”执行相同的操作,依此类推。

同样,我对找到平均每月价值或每小时价格感兴趣,但我想一旦我知道如何获得平均每日价格,我就可以计算出这些。

我最大的困难是自动从日期变量中提取一年中的哪一天。如何循环遍历所有 365 天并计算每天的平均值,并将其存储在列表中?

我能够使用 weekdays() 函数找到一周中某天的平均值,但我找不到任何类似的东西。

Geo*_*ood 5

这是使用dplyrand的解决方案lubridate。首先,通过使用floor_date(请参阅下面的thelatemail评论)将日期四舍五入到最接近的天单位来简化日期,然后使用group_by日期并计算平均值summarize

library(dplyr)
library(lubridate)

df %>%
  mutate(date = floor_date(date)) %>%
  group_by(date) %>%
  summarize(mean_X1 = mean(X1))
Run Code Online (Sandbox Code Playgroud)

使用该lubridate包,您可以使用类似的方法按月、周或小时获取平均值。例如,要按月计算平均值:

df %>%
  mutate(date = month(date)) %>%
  group_by(date) %>%
  summarize(mean_X1 = mean(X1))
Run Code Online (Sandbox Code Playgroud)

并按小时:

df %>%
  mutate(date = hour(date)) %>%
  group_by(date) %>%
  summarize(mean_X1 = mean(X1))
Run Code Online (Sandbox Code Playgroud)