You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言按日期筛选每日最低电价时段的函数实现求助

R语言按日期筛选每日最低电价时段的函数实现求助

看起来你现在卡在按日期筛选每日最便宜电价时段的问题上啦,我来帮你梳理下问题所在,再给你个靠谱的解决方案~

首先先说说你现有代码的问题:

  • 分组逻辑错了:你用group_by(DateTime)是按每个小时来分组的,每个组里本来就只有一条数据,summarise(min(Price))其实就是取每个小时自己的价格,完全没实现“按日期分组”的目的。
  • top_n的默认行为反了:top_n(2)默认是取分组后数值最大的2条,而你要的是最便宜(数值最小)的,而且你是想在每个日期组里选2个最低价小时,不是在整个数据集里选。

接下来是正确的实现思路和代码:
我们需要先把DateTime转换成日期维度来分组,然后在每个日期组里选出价格最低的N个小时,同时保留原始的DateTime和Price信息。用slice_min()函数就能完美实现这个需求,它可以在每个分组里筛选出指定数量的最小值行。

这里给你写一个更灵活的函数,支持自定义选几个最便宜的小时:

cheapest_n_hours <- function(data, n = 2) {
  data %>%
    # 按日期分组(把DateTime转成日期格式)
    group_by(date = as.Date(DateTime)) %>%
    # 在每个日期组里选Price最小的n行,with_ties=TRUE会保留并列最低价的时段
    slice_min(Price, n = n, with_ties = TRUE) %>%
    # 取消分组,方便后续操作
    ungroup() %>%
    # 可选:按日期和价格排序,让结果更清晰
    arrange(date, Price)
}

函数参数说明:

  • n:你想要选的每日最便宜小时数,默认是2,你可以根据需求修改(比如改成3)
  • with_ties=TRUE:如果某天有多个时段价格相同且都是当日最低价,这些时段都会被保留;如果只想严格选n个,不管并列,可以把这个参数改成FALSE

调用示例:

# 调用函数,获取每日最便宜的2个小时
result <- cheapest_n_hours(df, 2)
print(result)

这样得到的结果就会是你想要的:每个日期下最便宜的2个(或并列的)时段,包含完整的DateTime和Price信息,按日期和价格排序好。

备注:内容来源于stack exchange,提问作者Jouni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:13:13