R: diff() 和 tsibble - 大小必须为 n 或 1 而不是 n-2

R: diff() and tsibble - must be size n or 1 not n-2

鉴于:

test <- tsibble(
  date = lubridate::now() + 0:9,
  value = rnorm(10)
)  %>%
  mutate (vdiff =diff(value, differences = 2))

如何避免以下情况:

Error: Problem with mutate() column vdiff. ℹ vdiff = diff(value, differences = 2, na.pad = TRUE). ℹ vdiff must be size 10 or 1, not 8

我尝试添加 na.pad = TRUE 但没有效果(无论如何,我更愿意使用 0 而不是 NA

实现您想要的结果的一种方法是使用 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