R使用md_stock获取股票数据后调用ROC函数报错如何解决?
问题根因
你调用md_stock()从163源获取的股票数据中,价格类字段默认返回字符类型(部分场景带千位分隔符等特殊标识),直接生成xts对象时未做类型转换,导致数值计算类函数无法执行。
修复方案
前置依赖补充
首先确保加载xts和TTR包(ROC()函数来自TTR包):
library(xts) library(TTR)
代码修改示例
在原有逻辑基础上,对目标价格列做数值转换后再生成xts对象即可:
library(pedquant) library(xts) library(TTR) tickers = c('000858', '600887', '000651', '600176') port = md_stock(tickers, from = "2003-01-01", source = "163") # 对目标列做数值转换后生成xts对象 stock1 = xts(as.numeric(port[["000858"]][,7]), order.by = port[["000858"]][["date"]]) # 运行ROC计算 ROC(stock1, type = "discrete")
可选优化
- 转换时如果出现NA值,说明原始数据存在千位分隔符等特殊字符,可先清洗再转换:
# 先移除逗号分隔符再转数值 price_col = as.numeric(gsub(",", "", port[["000858"]][,7])) stock1 = xts(price_col, order.by = port[["000858"]][["date"]]) - 建议按列名取数替代按列索引取数,避免源数据列顺序调整后逻辑报错,比如收盘价字段为
close时,写法调整为:stock1 = xts(as.numeric(port[["000858"]]$close), order.by = port[["000858"]]$date)
内容的提问来源于stack exchange,提问作者irationalpig
相关产品推荐
相关产品推荐

