Zoo Lag diff обратно во фрейм данных

Я хочу поместить результаты отложенного сравнения обратно в мой фрейм данных. Это означает, что у меня были бы ведущие АН для разных лагов.

Я использую:

new.df$lag1 <- diff(new.df$Close, lag = 1, differences = 1, arithmetic = TRUE, na.pad = TRUE)
Error in `$<-.data.frame`(`*tmp*`, lag1, value = c(0.248860000000001,  : 
  replacement has 6177 rows, data has 6178

Я подумал, что если бы он сказал na.pad=TRUE, то это поместило бы NA в строку 1 и лаговую разницу в строке 2. Это не так.

Вот некоторые примеры данных:

data <- c(10,15,89,40,55,67,79)

lag1 <- diff(data, lag = 1, differences = 1, arithmetic = TRUE, na.pad = TRUE)

цель состоит в том, чтобы поместить это обратно в информационный кадр... с ведущими NA в зависимости от количества лагов.

1 ответ

dta = c(10,15,89,40,55,67,79)

require(zoo)

apply(lag(zoo(dta), c(-1,0), na.pad = TRUE), 1L, diff)

#> apply(lag(zoo(dta), c(-1,0), na.pad = TRUE), 1L, diff)
#  1   2   3   4   5   6   7 
# NA   5  74 -49  15  12  12 

Кроме того, старайтесь избегать именования ваших объектов именами, уже используемыми базой R (например, data)!


10 мая 2018 года @thistleknot указал мне, что dplyr маски stats собственный lag универсальный Поэтому убедитесь, что у вас нет dplyr прикреплен или вместо запуска stats::lag явно, иначе мой код не будет работать.

Я думаю, что нашел виновника: github.com/tidyverse/dplyr/issues/1586 ответ: Это естественное следствие наличия большого количества пакетов R. Просто будьте явными и используйте stats:: lag или dplyr:: lag

Другие вопросы по тегам