#r #tidyverse #tsibble
Вопрос:
Дано:
test <- tsibble(
date = lubridate::now() 0:9,
value = rnorm(10)
) %>%
mutate (vdiff =diff(value, differences = 2))
Как мне избежать следующего :
Ошибка: Проблема с
mutate()
колонкойvdiff
. ℹvdiff = diff(value, differences = 2, na.pad = TRUE)
.vdiff
ℹ должен быть размер 10 или 1, а не 8
Я попытался добавить na.pad = TRUE
, но это не возымело никакого эффекта (и в любом случае я бы предпочел дополнить 0
не NA
).
Ответ №1:
Одним из подходов к достижению желаемого результата было бы использование dplyr::lag
. Однако благодаря комментарию @Mitchello’Hara-Wild есть более простой способ достичь этого, просто используя tsibble::difference
library(tsibble)
library(dplyr)
set.seed(42)
d <- tsibble(
date = lubridate::now() 0:9,
value = rnorm(10)
)
#> Using `date` as index variable.
d %>%
mutate(vdiff = difference(value, differences = 2, default = 0))
#> # A tsibble: 10 x 3 [1s] <?>
#> date value vdiff
#> <dttm> <dbl> <dbl>
#> 1 2021-06-20 14:33:28 1.37 0
#> 2 2021-06-20 14:33:29 -0.565 0
#> 3 2021-06-20 14:33:30 0.363 2.86
#> 4 2021-06-20 14:33:31 0.633 -0.658
#> 5 2021-06-20 14:33:32 0.404 -0.498
#> 6 2021-06-20 14:33:33 -0.106 -0.282
#> 7 2021-06-20 14:33:34 1.51 2.13
#> 8 2021-06-20 14:33:35 -0.0947 -3.22
#> 9 2021-06-20 14:33:36 2.02 3.72
#> 10 2021-06-20 14:33:37 -0.0627 -4.19
Комментарии:
1. Вы также можете использовать
difference()
функцию, которая дополняет значения NA.2. @Митчелло’Хара-Дикий. Спасибо, что указали на это. Не знал об этом, я не знаком с
tsibble
пакетом. Еще более проблематично то, что мой подход на самом деле приводит к неправильному результату, поскольку я упустил разницу между «отставанием» и «различиями».