2015-05-13 40 views
3

嗨我正在使用R quantmod库,我想查找并返回两个值(今天的体积,昨天的体积)的最大值。使用合并函数从xts对象获取最大值

require(quantmod) 
getSymbols("HELE") 
# Ok now when I do this it does not return a single column with the highest 
# volume 
head( merge(HELE, max (HELE$HELE.Volume,lag(HELE$HELE.Volume, k=1 ) ))) 

这通常工作,因为例如说我想从昨天关闭减去今天的高点我可以做到这一点。

head( merge(HELE, abs(HELE$HELE.High - lag(HELE$HELE.Close, k=1) ))) 

我也尝试应用功能,但没有工作,以及,

head( merge(HELE, as.xts(apply(c(lag(HELE$HELE.Volume, k=1 ), HELE$HELE.Volume ), 1, max))  )) 

在此先感谢。 Ahdee

回答

3

尝试这种情况:

head(merge(HELE, pmax (HELE$HELE.Volume,lag(HELE$HELE.Volume, k=1), na.rm=TRUE))) 

pmaxmax即它找到成对max两者向量向量化版本。您还需要包含na.rm=TRUE,否则最终会得到缺少值的NAs。

只使用max它会找到两个向量之间的全局最大值,并创建一个只填充此值的列。

输出:

> head(merge(HELE, pmax (HELE$HELE.Volume,lag(HELE$HELE.Volume, k=1) , na.rm=T))) 
      HELE.Open HELE.High HELE.Low HELE.Close HELE.Volume HELE.Adjusted HELE.Volume.1 
2007-01-03  24.25  25.16 24.25  25.12  251800   25.12  251800 
2007-01-04  25.15  25.50 25.06  25.49  224400   25.49  251800 
2007-01-05  25.45  25.50 24.78  24.93  289700   24.93  289700 
2007-01-08  24.82  25.19 24.65  24.69  285000   24.69  289700 
2007-01-09  21.84  22.60 21.75  22.19  1534800   22.19  1534800 
2007-01-10  22.11  22.50 21.87  22.45  293600   22.45  1534800 
+0

感谢这个伟大工程;我仍然不完全理解为什么这不起作用。看起来好像是一些使用合​​并的函数,似乎没有读取特定行的数据,例如,你知道为什么第一个函数失败,但最后一个失败吗? (头(合并(HELE,意思是(c(HELE $ HELE.High,HELE $ HELE.Low,HELE $ HELE.Close)))); (HELE,abs(HELE $ HELE.High- HELE $ HELE.Low-lag(HELE $ HELE.Close,k = 2))))' – Ahdee

+0

第一个失败,因为意思是没有做明智的行计算。意思不是矢量化的。对于平均值的行计算,您需要使用'apply'类型的函数。 '意思是(c(HELE $ HELE.High,HELE $ HELE.Low,HELE $ HELE.Close))'会找到所有这些向量的均值。你不想那样。你想要行明智的手段,所以你不能使用'平均'。这就是为什么我使用'pmax'而不是'max'的原因。尝试'max(c(1,2),c(3,4))'和'pmax(c(1,2),c(3,4))',你会看到不同。不幸的是,没有'pmean'函数,所以你需要''应用''mean'。 – LyzandeR

+1

另一方面'''是矢量化的,所以它会按预期工作。我可以用不同的方式说出它:“mean”不是矢量化的,因此将2个矢量减少为单个值。 '-'被矢量化,所以会返回一个与两个单独起始矢量大小相同的新矢量。我希望这有帮助。 – LyzandeR