加密货币市场分析项目: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
相关产品推荐
相关产品推荐

