在考虑年份和编号的情况下滞后变量

时间:2018-07-09 08:33:30

标签: r dataframe longitudinal

我有以下不平衡数据集:

id Year A
1  1    5
1  2    6
2  1    11
2  2    12
2  3    13
3  2    1
3  3    3

我想要一个可变的lagA,它真正考虑了每个观测值的年份和ID,而不仅仅是将列向下移动:

id Year A   lagA
1  1    5   NA
1  2    6   5
2  1    11  NA
2  2    12  11
2  3    13  12
3  2    1   NA
3  3    3   1

有什么想法吗?我试图确保数据帧是pf类pdata.frame,但是当我使用函数lag(A,1)时,它只是将列向下移动,从而导致结果不一致。

1 个答案:

答案 0 :(得分:2)

我们需要按'id'分组,然后执行lag

library(dplyr)
df1 %>%
     arrange(id, Year) %>% # in case not ordered by 'year'
     group_by(id) %>%
     mutate(lagA = lag(A))
# A tibble: 7 x 4
# Groups:   id [3]
#     id  Year     A  lagA
#  <int> <int> <int> <int>
#1     1     1     5    NA
#2     1     2     6     5
#3     2     1    11    NA
#4     2     2    12    11
#5     2     3    13    12
#6     3     2     1    NA
#7     3     3     3     1