2016-11-23 81 views
1

我有一個df的股票價格,我想計算回報,因此我需要計算每個滯後的今日價值 - 「昨天」。 此外,我希望這一點被滯後1天,因爲我想知道昨天的回報如何影響我今天的決定。 我試過sapply(importData, function(x) diff(x)/lag(x, k=-1)) 但是這不知怎的給了我完全不同的值,而不是我所期望的。區分和滯後的一個df值

以下是一個示例值: 股票1的價格今天爲16.49,昨天爲16.32,因此我預計在昨天價格之前的單元格值爲0.17,因爲它滯後於1。我是-0.031。

我想我一定理解錯了代碼,有人可以幫我一下嗎?

編輯:這裏是一些TESTDATA
時間|股票11
天| 18.85
一天2 | 18.32
第三天| 18.49

所以我的結果應該是18.49-18.32 = 0.17而且由於這結果滯後1,它應該在day1現在的值的單元格中。

+0

我想你只需要'差異(X)' – Christoph

+0

沒有可重複的例子,不可能肯定地說,但這可能是重新考慮的與基地R的「滯後」功能的行爲相關聯。這個函數接受「矢量或矩陣或單變量或多變量時間序列」。 – lmo

+0

@Christoph你是對的。我得到了所需的結果。但是因爲'lag(x)'只會改變時間而不改變它的值,它只會導致一個值滯後兩次而不是一個完全不同的值,不是嗎? – ykjk

回答

2

試試這些。除了最後一個沒有使用包。

1)純矢量

x <- c(2, 2.1, 2.2) 
c(NA, diff(x)/x[-length(x)]) 
## [1] NA 0.05000000 0.04761905 

仔細檢查:

c(NA, (2.1 - 2)/2, (2.2 - 2.1)/2.1) 
## [1] NA 0.05000000 0.04761905 

1a)的數近似

diff(log(x)) 
## [1] 0.04879016 0.04652002 

diff(log(x))是基於以下WHE如果x接近1,則最後的等於約等於近似等於並且基於近似log(x)= x-1。例如,log(1.01)= 0.009950331其接近於1.01-1 = .01。

diff(log(x)) 
= c(log(x[2]) - log(x[1]), log(x[3]) - log(x[2])) 
= c(log(x[2]/x[1]), log(x[3]/x[2])) 
= c(x[2]/x[1] - 1, x[3]/x[2] - 1) (approximately) 

2)TS時間序列

tt <- ts(c(2, 2.1, 2.2) 
diff(tt)/lag(tt, -1) 
## Time Series: 
## Start = 2 
## End = 3 
## Frequency = 1 
## [1] 0.05000000 0.04761905 

3)動物園時間序列

library(zoo) 
z <- zoo(c(2, 2.1, 2.2)) 
diff(z, arithmetic = FALSE) - 1 
##   2   3 
## 0.05000000 0.04761905 
+0

感謝您提供良好的概述,但我並不完全瞭解您的示例背後的數學。讓我們做1)這裏2.2-2.1是0.1因此,當前由NA所佔領的字段應該具有o.1的值,因爲差值=回報,然後一天倒帶它在時間線上「早一點」放置一個位置。 – ykjk

+0

已經通過寫出來澄清。如果我們希望答案與輸入的長度相同,那麼第一個值是NA,因爲在第一個值之前沒有值,因此無法計算第一個值的返回值。第一個非NA值的返回值將是(2.1 - 2)/ 2。在你問「退貨」的問題中。第一個非NA回報是(2.1-2)/ 2。相反,分子2.1-2是差異,而不是回報。 –

1
如果要滯後值

使用dplyr S功能lag。見下面

set.seed(1000) 
library(dplyr) 
df <- data.frame(exp = c("A", "A", "A", "B", "B", "B"), 
       x = rnorm(6, 2, 3)) 
df %>% group_by(exp) %>% mutate(x1 = lag(x)) 

你的榜樣

df <- data.frame(day = c("d1", "d2", "d3"), val = c(18.85, 18.32, 18.49)) 
df %>% mutate(val1 = lag(val)) 

你有

day val val1 
1 d1 18.85 NA 
2 d2 18.32 18.85 
3 d3 18.49 18.32 

lead功能的工作原理相反lag