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