【发布时间】:2019-09-05 12:58:49
【问题描述】:
使用以下数据集:
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 sup> ik
我是type,j origin 和 k dest。我决定先用dplyr计算a,lag.a的滞后:
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),不要将滞后变量变异到数据集中,以免对其进行过度加权。
【问题讨论】:
标签: r dplyr data.table lag