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

如何在R中基于时间戳计算并提取分钟级大宗商品价格的开高低收值

实现方案

这里提供两种常用实现方式,高频大数据场景优先选择data.table版本,运行效率更高。

方法1:data.table 版本(推荐大数据量使用)

# 加载依赖包
library(data.table)
library(lubridate)

# 1. 读取数据,fread对大文件读取效率远高于基础read函数
dt <- fread("你的数据文件路径.csv")

# 2. 合并日期时间字段生成完整时间戳,同时生成分钟级分组标识
dt[, full_datetime := ymd_hms(paste(Date, Time))]
dt[, minute_group := floor_date(full_datetime, unit = "minute")]

# 3. 按分钟分组计算目标指标
result <- dt[, .(
  Date = format(minute_group, "%Y%m%d"),
  Time = format(minute_group, "%H:%M:%S"),
  Start = first(Price),
  End = last(Price),
  Low = min(Price, na.rm = T),
  High = max(Price, na.rm = T)
), by = minute_group]

# 4. 移除冗余分组列,得到最终结果
result[, minute_group := NULL]

方法2:tidyverse 版本

# 加载依赖包
library(tidyverse)
library(lubridate)

# 读取数据
df <- read_csv("你的数据文件路径.csv")

# 数据处理与聚合
result <- df %>%
  mutate(
    full_datetime = ymd_hms(paste(Date, Time)),
    minute_group = floor_date(full_datetime, unit = "minute")
  ) %>%
  group_by(minute_group) %>%
  summarise(
    Date = format(minute_group, "%Y%m%d"),
    Time = format(minute_group, "%H:%M:%S"),
    Start = first(Price),
    End = last(Price),
    Low = min(Price, na.rm = TRUE),
    High = max(Price, na.rm = TRUE)
  ) %>%
  ungroup() %>%
  select(-minute_group)

注意事项

  • 运行前需确认原始数据是按时间正序排列的,first()和last()才会返回正确的首尾价格;如果数据顺序不确定,可以先按full_datetime排序再执行聚合
  • 若数据中存在空值,na.rm = T参数会自动跳过空值计算极值,无缺失值可删除该参数
  • 结果导出可直接使用fwrite(result, "输出文件路径.csv")或者write_csv(result, "输出文件路径.csv")

内容的提问来源于stack exchange,提问作者Hawky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:27:04