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

加密货币市场分析项目:R语言代码实现遇到问题求助

解决加密货币数据聚合函数的问题

嘿,看你卡在这个加密货币分析的函数上了——我来帮你补全并优化这段代码!从你给出的片段来看,你已经完成了数据获取和日期对齐的第一步,接下来需要实现按指定频率分组聚合的核心逻辑对吧?

先理清楚你的需求:

你想用round_date把原始数据的日期按指定频率(比如小时、天、周)对齐,然后对每种加密货币的同频率时段数据做聚合统计(比如收盘价、成交量、市值这些指标)。

补全并优化后的完整函数

library(magrittr)
library(dplyr)
library(tidyverse)
library(crypto)
library(lubridate)
library(xts)
library(quantmod)
library(tidyr)

# 先获取加密货币数据
df <- getCoins(limit = 50)

# 补全后的聚合函数
yourfunction <- function(df, frequency = "day") {
  # 处理默认频率:如果传入NULL,默认按天聚合
  freq <- frequency %||% "day"
  
  df %>%
    # 按指定频率对齐日期
    mutate(date = lubridate::round_date(date, freq)) %>%
    # 按加密货币代码和对齐后的日期分组
    group_by(symbol, date) %>%
    # 自定义聚合逻辑(可根据你的需求修改)
    summarise(
      # 时段内最后一笔收盘价
      close = last(close, na.rm = TRUE),
      # 时段内最高价/最低价
      high = max(high, na.rm = TRUE),
      low = min(low, na.rm = TRUE),
      # 时段内成交量总和
      volume = sum(volume, na.rm = TRUE),
      # 时段内最后一笔市值
      market_cap = last(market_cap, na.rm = TRUE),
      # 自动取消分组,避免后续操作报错
      .groups = "drop"
    )
}

关键细节说明:

  • 用%||%(magrittr包的运算符)处理frequency为NULL的情况,给个默认值"day",避免函数报错
  • 聚合逻辑可以完全自定义:比如你如果需要时段内的平均收盘价,就把last(close)改成mean(close, na.rm = TRUE);如果不需要某些指标,直接删掉对应的行就行
  • 加上na.rm = TRUE是为了处理原始数据中可能存在的缺失值,避免聚合结果变成NA

使用示例

# 按小时聚合数据
hourly_crypto_data <- yourfunction(df, "hour")

# 按周聚合数据
weekly_crypto_data <- yourfunction(df, "week")

# 用默认的按天聚合
daily_crypto_data <- yourfunction(df)

注意事项

  • lubridate::round_date支持的频率参数包括:"second", "minute", "hour", "day", "week", "month", "year",不要传入不合法的参数哦
  • getCoins返回的数据中,部分加密货币可能在某些时段没有交易数据,聚合后对应的行可能会缺失,如果你需要补全时间序列,可以后续用tidyr::complete来处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:34