计算滞后,但使用dplyr按两类分组

时间:2020-06-19 19:37:58

标签: r dplyr

我想要的是使用滞后(var3包)创建dplyr,但应该与年份和ID保持一致。我的意思是,滞后应该属于相应的ID。数据集就像一个不平衡的面板。

YEAR ID VARS
2010 1 -
2011 1 -
2012 1 -
2010 2 -
2011 2 -
2012 2 -
2010 3 -
... 

我的问题类似于以下问题/帖子,但按两类分组:

dplyr: lead() and lag() wrong when used with group_by()

我尝试扩展解决方案,但未成功(我得到NA s)。

尝试#1:

data %>%
  group_by(YEAR,ID) %>%
  summarise(var1 = ...
            var2 = ...
            var3 = var1 - dplyr::lag(var2))
  )

尝试#2:

data %>%
  group_by(YEAR,ID) %>%
  summarise(var1 = ...
            var2 = ...
            gr = sprintf(YEAR,ID)
            var3 = var1 - dplyr::lag(var2, order_by = gr))
  )

最小示例:


MyData <- 
data.frame(YEAR = rep(seq(2010,2014),5),
           ID = rep(1:5, each=5),
           var1 = rnorm(n=25,mean=10,sd=3),
           var2 = rnorm(n=25,mean=1,sd=1)
           )

MyData %>%
  group_by(YEAR,ID) %>%
  summarise(var3 = var1 - dplyr::lag(var2)
  )

谢谢。

1 个答案:

答案 0 :(得分:0)

您是说group_by(ID)并有效地“按年份订购”吗?

MyData  %>%
  group_by(ID) %>%
  mutate(var3 = var1 - dplyr::lag(var2)) %>%
  print(n=99)
# # A tibble: 25 x 5
# # Groups:   ID [5]
#     YEAR    ID  var1    var2  var3
#    <int> <int> <dbl>   <dbl> <dbl>
#  1  2010     1 11.1   1.16   NA   
#  2  2011     1 13.5  -0.550  12.4 
#  3  2012     1 10.2   2.11   10.7 
#  4  2013     1  8.57  1.43    6.46
#  5  2014     1 12.6   1.89   11.2 
#  6  2010     2  8.87  1.87   NA   
#  7  2011     2  5.30  1.70    3.43
#  8  2012     2  6.81  0.956   5.11
#  9  2013     2 13.3  -0.0296 12.4 
# 10  2014     2  9.98 -1.27   10.0 
# 11  2010     3  8.62  0.258  NA   
# 12  2011     3 12.4   2.00   12.2 
# 13  2012     3 16.1   2.12   14.1 
# 14  2013     3  8.48  2.83    6.37
# 15  2014     3 10.6   0.190   7.80
# 16  2010     4 12.3   0.887  NA   
# 17  2011     4 10.9   1.07   10.0 
# 18  2012     4  7.99  1.09    6.92
# 19  2013     4 10.1   1.95    9.03
# 20  2014     4 11.1   1.82    9.17
# 21  2010     5 15.1   1.67   NA   
# 22  2011     5 10.4   0.492   8.76
# 23  2012     5 10.0   1.66    9.51
# 24  2013     5 10.6   0.567   8.91
# 25  2014     5  5.32 -0.881   4.76

(暂时将您的summarize改成mutate。)