一个 df 的微分值和滞后值
Differentiating and lagging values of one df
我有一个股票价格的 df,我想计算 return,因此我需要计算今天的价值 - 每个滞后的昨天的价值。
此外,我希望这会滞后 1 天,因为我想知道昨天 return 是如何影响我今天的决定的。
我试过了 sapply(importData, function(x) diff(x) / lag(x, k=-1))
但这不知何故给了我完全不同的价值观。
这是一个示例值:
股票 1 今天的值为 16.49,昨天为 16.32,因此我预计昨天值之前的单元格中的值为 0.17,因为它滞后 1。但是公式给出了 -0.031。
我想我一定是理解错了代码,有人可以帮我吗?
编辑:这里是一些测试数据
时间 |库存 1
第 1 天|18.85
第 2 天|18.32
第 3 天|18.49
所以我的结果应该是 18.49-18.32 = 0.17
并且由于这个结果滞后 1 它应该在 day1
现在的值所在的单元格中。
试试这些。除了最后一个,没有使用任何包。
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
如果你想滞后值使用 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
相反
我有一个股票价格的 df,我想计算 return,因此我需要计算今天的价值 - 每个滞后的昨天的价值。
此外,我希望这会滞后 1 天,因为我想知道昨天 return 是如何影响我今天的决定的。
我试过了 sapply(importData, function(x) diff(x) / lag(x, k=-1))
但这不知何故给了我完全不同的价值观。
这是一个示例值: 股票 1 今天的值为 16.49,昨天为 16.32,因此我预计昨天值之前的单元格中的值为 0.17,因为它滞后 1。但是公式给出了 -0.031。
我想我一定是理解错了代码,有人可以帮我吗?
编辑:这里是一些测试数据
时间 |库存 1
第 1 天|18.85
第 2 天|18.32
第 3 天|18.49
所以我的结果应该是 18.49-18.32 = 0.17
并且由于这个结果滞后 1 它应该在 day1
现在的值所在的单元格中。
试试这些。除了最后一个,没有使用任何包。
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
如果你想滞后值使用 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