如何在每個組中創(chuàng)建一個滯后變量?我有一張數(shù)據(jù)表:set.seed(1)data <- data.table(time = c(1:3, 1:4), groups = c(rep(c("b", "a"), c(3, 4))), value = rnorm(7))data# groups time value# 1: b 1 -0.6264538# 2: b 2 0.1836433# 3: b 3 -0.8356286# 4: a 1 1.5952808# 5: a 2 0.3295078# 6: a 3 -0.8204684# 7: a 4 0.4874291我想計算“value”列的滯后版本,內每個級別的“組”。結果應該是# groups time value lag.value# 1 a 1 1.5952808 NA# 2 a 2 0.3295078 1.5952808# 3 a 3 -0.8204684 0.3295078# 4 a 4 0.4874291 -0.8204684# 5 b 1 -0.6264538 NA# 6 b 2 0.1836433 -0.6264538# 7 b 3 -0.8356286 0.1836433我試過用lag直接:data$lag.value <- lag(data$value) .這顯然是行不通的我也嘗試過:unlist(tapply(data$value, data$groups, lag)) a1 a2 a3 a4 b1 b2 b3 NA -0.1162932 0.4420753 2.1505440 NA 0.5894583 -0.2890288 這幾乎是我想要的。但是,生成的向量與data.table中的排序不同,這是有問題的。在基R、plyr、dplyr和data.table中,最有效的方法是什么?
3 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
dplyr
:
library(dplyr)data <- data %>% group_by(groups) %>% mutate(lag.value = dplyr::lag(value, n = 1, default = NA))
> data
Source: local data table [7 x 4]
Groups: groups
time groups value lag.value
1 1 a 0.07614866 NA
2 2 a -0.02784712 0.07614866
3 3 a 1.88612245 -0.02784712
4 1 b 0.26526825 NA
5 2 b 1.23820506 0.26526825
6 3 b 0.09276648 1.23820506
7 4 b -0.09253594 0.09276648
order_by
lag
添加回答
舉報
0/150
提交
取消