我在R中有一个数据集,如下所示:
> head(statadata_one_every_5_minutes)
date time_greece gmt_offset_greece price_greece time_and_date gmt_offset_greece_test time_and_date_correct time_and_date_difference
1 2009-12-01 08:30:04.548 +2 2275.32 2009-12-01 08:30:04.548 2 2009-12-01 06:30:04 0 secs
6 2009-12-01 08:35:04.380 +2 2297.74 2009-12-01 08:35:04.380 2 2009-12-01 06:35:04 0 secs
11 2009-12-01 08:40:04.328 +2 2322.04 2009-12-01 08:40:04.328 2 2009-12-01 06:40:04 0 secs
16 2009-12-01 08:45:04.365 +2 2325.51 2009-12-01 08:45:04.365 2 2009-12-01 06:45:04 0 secs
21 2009-12-01 08:50:04.463 +2 2331.36 2009-12-01 08:50:04.463 2 2009-12-01 06:50:04 0 secs
26 2009-12-01 08:55:04.403 +2 2335.09 2009-12-01 08:55:04.403 2 2009-12-01 06:55:04 0 secs
ID price_greece_numeric
1 1 2275.32
6 6 2297.74
11 11 2322.04
16 16 2325.51
21 21 2331.36
26 26 2335.09
我试图使用以下命令计算连续元素的日志返回:
> n <- length(statadata_one_every_5_minutes$price_greece_numeric)
> statadata_one_every_5_minutes$log_returns <- log(statadata_one_every_5_minutes$price_greece_numeric[-1]/statadata_one_every_5_minutes$price_greece_numeric[-n])
但是我收到以下错误:
Error in `$<-.data.frame`(`*tmp*`, log_returns, value = c(0.00980532931107567, :
replacement has 61897 rows, data has 61898
关于如何修复它的任何想法?
你需要使用lag
:
library(dplyr)
statadata_one_every_5_minutes %>%
mutate(log_returns = log(price_greece_numeric/lag(price_greece_numeric)))
data$value[-1]
删除第1行,它会为您提供一个短1的数据帧 - 这也是错误所指出的,因为您试图将此(短)结果转换为原始数据帧。
您没有指定如何处理最后一行,并且因为您没有可用的data.frame,我可以给出一个示例方法来执行此操作:
log(c(0,data$value)/c(data$value,0))[-1]
最后的[-1]
删除了第一个值,因此结果的第一行是log(data$value[1]/data$value[2])
。