按日和小时分组计算平均E5油价的技术求助:日期时区格式转换问题及dplyr实现可行性验证
解决带时区的日期转换及按日小时分组计算均价问题
首先,你遇到的日期转换问题,核心是用错了lubridate的函数——你的日期格式是YYYY-MM-DD HH:MM:SS+时区,应该用ymd_hms()而不是mdy_hms()(后者是针对月-日-年格式的),这个函数完美支持带时区标识的ISO格式日期字符串,转换代码如下:
library(lubridate) price_2019$date <- ymd_hms(price_2019$date)
接下来看你写的dplyr代码,思路是对的,但有两个小细节需要调整:
- 你数据里的价格列是
e5,但代码里写的是mean(price),这里要对应改成mean(e5) - 建议加上
na.rm = TRUE,避免数据中的缺失值导致均值计算出错
修正后的完整代码如下:
library(dplyr) library(lubridate) # 第一步:正确转换带时区的日期格式 price_2019$date <- ymd_hms(price_2019$date) # 第二步:按小时(包含日期)分组计算平均e5价格 agg_price <- price_2019 %>% group_by(Date_Hour = floor_date(date, "hour")) %>% summarize(mean_e5_price = mean(e5, na.rm = TRUE))
另外,如果你希望分组结果更直观,把日期和小时拆成单独的列,也可以这样写:
agg_price <- price_2019 %>% mutate( date_only = as.Date(date), # 提取日期部分 hour_only = hour(date) # 提取小时部分 ) %>% group_by(date_only, hour_only) %>% summarize(mean_e5_price = mean(e5, na.rm = TRUE))
这两种方式都能实现你按日和小时分组计算平均价格的需求,选哪种看你对输出格式的偏好~
内容的提问来源于stack exchange,提问作者Gonny
相关产品推荐
相关产品推荐

