Используя следующий набор данных:
set.seed(2)
origin <- rep(c("DEU", "GBR", "ITA", "NLD", "CAN", "MEX", "USA", "CHN", "JPN", "KOR","DEU", "GBR", "ITA", "NLD", "CAN", "MEX", "USA", "CHN", "JPN", "KOR"), 6)
dest <- rep(c("GBR", "ITA", "NLD", "CAN", "MEX", "USA", "CHN", "JPN", "KOR","DEU", "GBR", "ITA", "NLD", "CAN", "MEX", "USA", "CHN", "JPN", "KOR", "DEU"), 6)
year <- rep(c(rep(1998, 10), rep(1999, 10), rep(2000, 10)), 2)
type <- rep(c(1,2,3,4,5), 12)
# type <- sample(1:10, size=length(origin), replace=TRUE)
a <- sample(100:10000, size=length(origin), replace=TRUE)
b <- sample(1000:100000, size=length(origin), replace=TRUE)
data.df <- as.data.frame(cbind(origin, dest, year, type, a,b))
rm(origin, year, dest, type, a,b)
Я хотел бы, например, вычислить следующую операцию:
- [a t + 1 ijk - a t ijk ] * b t ik
iбудучи type
, j origin
и k dest
.Я решил сначала вычислить задержку a, lag.a
с помощью dplyr
:
data.df <- data.df %>%
group_by(origin, dest, type) %>%
mutate(lag.a = lag(a, n = 1, default = NA))
Я думаю, что этот путь верен, даже если я не очень хорошо понимаю, как R может понять в одиночку, что такое отсчет временирассмотреть ... ??
Кстати, тем самым я получил результат, соответствующий первой части (a t + 1 ijk - a t ijk ) моих вычислений.Моя проблема в том, что я теперь не знаю, как я могу это сделать (lag.a t + 1 ijk * b t ik )... Любая идея?
Если возможно, я бы хотел решение (dplyr
или data.table
) без изменения переменной lag в наборе данных, чтобы не утяжелить его больше, чем необходимо.