区分和滞后一个df的值

时间:2016-11-23 13:32:57

标签: r sapply

我有一个股票价格的df,我想计算回报,因此我需要计算今天的价值 - 昨天的每一个滞后。 此外,我希望这会滞后1天,因为我想知道昨天的回归如何影响了我今天的决定。 我试过 import pandas as pd data = pd.read_csv('table.csv') 但这在某种程度上给了我完全不同的价值观。

以下是一个示例值: 股票1今天的价值为16.49,昨天的价格为16.32,因此我预计在昨天的价值之前,单位的价值为0.17,因为它滞后于1.但公式给出了-0.031。

我想我必须理解错误的代码,有人可以帮助我吗?

编辑:这是一些testdata
时间|股票1
第1天| 18.85
第2天| 18.32
day3 | 18.49

所以我的结果应该是18.49-18.32 = sapply(importData, function(x) diff(x) / lag(x, k=-1)),因为这个结果滞后1,所以它应该在0.17的值现在的单元格中。

2 个答案:

答案 0 :(得分: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))基于以下内容,其中最后的等于实际上近似等于并且基于近似log(x)= x-1(如果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 

答案 1 :(得分:1)

如果您想要滞后值,请使用dplyr函数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

相反