Функция R xts lag () отстает только на 1 позицию - PullRequest
1 голос
/ 19 апреля 2020

У меня некоторая путаница с функцией xts lag (). Независимо от того, какое значение я присваиваю для k, я получаю одинаковую задержку в 1 позицию.

Используя примеры из https://www.rdocumentation.org/packages/xts/versions/0.12-0/topics/diff.xts:

(x <- xts(1:10, Sys.Date()+1:10))
(x1 = lag(x))
(x2 = lag(x, k=2))
(lag(x, k=-1, na.pad=FALSE))

           [,1]
2020-04-20    1
2020-04-21    2
2020-04-22    3
2020-04-23    4
2020-04-24    5
2020-04-25    6
2020-04-26    7
2020-04-27    8
2020-04-28    9
2020-04-29   10
           [,1]
2020-04-20   NA
2020-04-21    1
2020-04-22    2
2020-04-23    3
2020-04-24    4
2020-04-25    5
2020-04-26    6
2020-04-27    7
2020-04-28    8
2020-04-29    9
           [,1]
2020-04-20   NA
2020-04-21    1
2020-04-22    2
2020-04-23    3
2020-04-24    4
2020-04-25    5
2020-04-26    6
2020-04-27    7
2020-04-28    8
2020-04-29    9
           [,1]
2020-04-20   NA
2020-04-21    1
2020-04-22    2
2020-04-23    3
2020-04-24    4
2020-04-25    5
2020-04-26    6
2020-04-27    7
2020-04-28    8
2020-04-29    9

Кем я могу быть не понимаешь здесь?

1 Ответ

3 голосов
/ 20 апреля 2020

Весьма вероятно, что dplyr вызывает беспорядок.

library(dplyr)   
# Attaching package: ‘dplyr’
# 
# The following objects are masked from ‘package:xts’:
#   
#   first, last
# 
# The following objects are masked from ‘package:stats’:
#   
#   filter, lag  <-------------------------------------------   !!!
# 
# The following objects are masked from ‘package:base’:
#   
#   intersect, setdiff, setequal, union

Вы можете внимательно прочитать эти стартовые сообщения и добавить stats:: перед функцией в этом случае (посмотрите ?lag и вы ' Увидим список альтернатив).

Сравнение:

cbind(stats::lag(x), stats::lag(x, k=2), stats::lag(x, k=-1, na.pad=F))
#            stats..lag.x. stats..lag.x..k...2. stats..lag.x..k....1..na.pad...F.
# 2020-04-21            NA                   NA                                 2
# 2020-04-22             1                   NA                                 3
# 2020-04-23             2                    1                                 4
# 2020-04-24             3                    2                                 5
# 2020-04-25             4                    3                                 6
# 2020-04-26             5                    4                                 7
# 2020-04-27             6                    5                                 8
# 2020-04-28             7                    6                                 9
# 2020-04-29             8                    7                                10
# 2020-04-30             9                    8                                NA

cbind(dplyr::lag(x), dplyr::lag(x, k=2), dplyr::lag(x, k=-1, na.pad=F))
#            dplyr..lag.x. dplyr..lag.x..k...2. dplyr..lag.x..k....1..na.pad...F.
# 2020-04-21            NA                   NA                                NA
# 2020-04-22             1                    1                                 1
# 2020-04-23             2                    2                                 2
# 2020-04-24             3                    3                                 3
# 2020-04-25             4                    4                                 4
# 2020-04-26             5                    5                                 5
# 2020-04-27             6                    6                                 6
# 2020-04-28             7                    7                                 7
# 2020-04-29             8                    8                                 8
# 2020-04-30             9                    9                                 9

xts::lag.xts на самом деле является методом пакета xts, который сообщает stats::lag как иметь дело с временными рядами. Однако вы можете использовать его напрямую, как вы уже обнаружили. Оба результата идентичны.

cbind(lag.xts(x), lag.xts(x, k=2), lag.xts(x, k=-1, na.pad=F))
#            lag.xts.x. lag.xts.x..k...2. lag.xts.x..k....1..na.pad...F.
# 2020-04-21         NA                NA                              2
# 2020-04-22          1                NA                              3
# 2020-04-23          2                 1                              4
# 2020-04-24          3                 2                              5
# 2020-04-25          4                 3                              6
# 2020-04-26          5                 4                              7
# 2020-04-27          6                 5                              8
# 2020-04-28          7                 6                              9
# 2020-04-29          8                 7                             10
# 2020-04-30          9                 8                             NA

Примечание: Возможно, вы автоматически загружаете некоторые пакеты с помощью манипулируемого файла .rprofile. Я бы порекомендовал не делать таких вещей и удалять там звонки library/require. Другая возможность состоит в том, что вы загружаете другой пакет, который использует dplyr в качестве зависимости (например, `tidyverse '). В любом случае, во всех случаях вышеприведенное решение работает (но утомительно каждый раз выяснять, какая базовая функция R была перезаписана каким-то небрежным пакетом!).

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