R - журнал возврата последовательных элементов кадра данных - PullRequest
0 голосов
/ 01 марта 2019

У меня есть набор данных в 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

Есть идеи как это исправить?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вам нужно использовать lag:

library(dplyr)

statadata_one_every_5_minutes %>% 
  mutate(log_returns = log(price_greece_numeric/lag(price_greece_numeric)))
0 голосов
/ 01 марта 2019

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]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...