2015-05-13 66 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