quantmod项目中用first(IXIC)标准化股票图表仅返回一行的原因咨询
问题原因及解决方案
嘿,我来帮你理清楚这个问题——你遇到的情况其实是xts对象(quantmod加载的数据默认是xts类型)的索引对齐特性导致的。
为什么IXIC/first(IXIC)只返回一行?
first(IXIC)返回的不是简单的数值向量,而是带有日期索引的完整xts行对象(也就是2007-01-03那一行的所有列数据,还带着日期标签)。当你用整个IXIC xts对象除以它时,xts会严格按照日期索引来匹配运算:只有和first(IXIC)的索引(2007-01-03)完全一致的那一行能完成除法,其他行因为没有对应的索引值,直接被过滤掉了,所以最终只返回一行结果。
而你试的IXIC/2能正常工作,是因为2是一个标量值,xts会自动把标量广播到整个对象的每个元素,所有行都能参与运算。
正确的标准化方法
要实现按每个列的首个数值标准化,你需要提取first(IXIC)里的纯数值(去掉日期索引),让它能广播到每一行。这里有两种简洁的方式:
- 使用
coredata()提取数值向量:
IXIC_Norm <- IXIC / coredata(first(IXIC))
- 或者用
as.vector()转换为纯向量:
IXIC_Norm <- IXIC / as.vector(first(IXIC))
运行上面任意一段代码后,再执行head(IXIC_Norm),就能看到所有行的数值都是相对于首日的比例,而不是只有第一行是1了。
内容的提问来源于stack exchange,提问作者vvostock
相关产品推荐
相关产品推荐

