R 分组数据的增长率,3组

R 分组数据的增长率,3组,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我试图计算分组数据的年增长率;按1)组、2)产品类别和3)年份分组 我试着按这三个参数分组,然后将增长率计算为:((x/dplyr::lag(x,1))-1)*100。但是,此操作会导致新列完全使用NAs group_exports_g.rate <- baci_exports %>% ungroup() %>% group_by(group,sna,t) %>% summarise(exports = sum(exports),

我试图计算分组数据的年增长率;按1)组、2)产品类别和3)年份分组

我试着按这三个参数分组,然后将增长率计算为:((x/dplyr::lag(x,1))-1)*100。但是,此操作会导致新列完全使用NAs

group_exports_g.rate <- baci_exports %>% ungroup() %>% 
  group_by(group,sna,t) %>% summarise(exports = sum(exports),
                                      n= sum(n)) %>% ungroup() %>% 
  group_by(group,sna,t) %>% arrange(group,sna,t) %>% 
  mutate(gr.exports = 100*((exports/lag(exports,1))-1))

我想知道每个组、产品类别和年份的年增长率(百分比变化)。

这里您需要为
滞后
表达式设置默认值,因为第一个值的滞后默认值为
NA
。这将导致
NA
感染您的其余计算

因此,设置
lag(exports,1,1)
(您应该决定适合您的目的的默认值,例如我将其设置为1)

组导出率%ungroup()%>%
集团(集团、sna、t)%>%汇总(出口=总额(出口),
n=总和(n))%%>%ungroup()%%>%
分组依据(组,sna,t)%%>%
突变(gr.exports=100*((导出/滞后(导出,1,1))-1))
集团出口率
#一个tibble:20x6
#组:组,sna,t[20]
集团sna t出口和集团出口
1阿富汗资本货物1995 1195。36    119426.
2阿富汗消费品1995 22997。207   2299605.
3阿富汗燃料和润滑油1995 5.37 1 437。
4阿富汗中间产品1995 9721。137    971956.
5阿富汗资本货物零部件和附件1995 184。30     18298.
6阿富汗乘用车1995 111。5     11026.
7阿富汗初级商品1995 47976。58   4797521.
8阿尔及利亚资本货物1995 30316。270   3031502.
9阿尔及利亚消费品1995 150361。364  15036047.
10阿尔及利亚燃料和润滑油1995 8686043。106 868604202.
11阿尔及利亚中间产品1995 448719。563  44871760.
12阿尔及利亚资本货物零部件和附件1995 6634。150    663291.
13东南资本货物1995 5711。143    571017.
14 SE消费品1995 120660。654  12065857.
15 SE燃料和润滑剂1995 2265。5    226354.
16其他地方未规定的SE货物1995 75.8 3 7481。
17 SE中间产品1995 60184。322   6018325.
18 SE资本货物零部件和附件1995 2250。57    224882.
19 SE乘用车1995 280。12     27944.
20东南初级商品1995 36458。143   3645745.

正如@Croote所指出的,您的样本数据只有一年的时间,因此计算滞后时间将(正确地)产生NA。我想这就是你想要的,因为1995年的增长是不确定的

为了在两年的数据上测试您的数据,这里有一些虚假数据,其中每一个值在下一年大约高出50%:

baci_exports2 <- bind_rows(
  baci_exports %>% ungroup(),
  baci_exports %>% 
    ungroup() %>%
    mutate(t = 1996, 
           exports = exports * rnorm(n(), mean = 1.5, sd = 0.01))
)

使用OP中的新阿富汗数据编辑:

afghanistan %>% 
  ungroup() %>%
  group_by(group,sna,t) %>% 
  summarise(exports = sum(exports),
            n= sum(n)) %>% 
  mutate(gr.exports = 100*((exports/lag(exports,1))-1)) %>%
  ungroup()

# A tibble: 23 x 6
   group       sna               t exports     n gr.exports
   <chr>       <chr>         <dbl>   <dbl> <int>      <dbl>
 1 Afghanistan Capital goods  1995   1195.    36      NA   
 2 Afghanistan Capital goods  1996   1487.    49      24.4 
 3 Afghanistan Capital goods  1997   1525.    71       2.53
 4 Afghanistan Capital goods  1998   1598.    50       4.80
 5 Afghanistan Capital goods  1999   2688.    64      68.2 
 6 Afghanistan Capital goods  2000   1754.    88     -34.7 
 7 Afghanistan Capital goods  2001   5914.   107     237.  
 8 Afghanistan Capital goods  2002   2620.    76     -55.7 
 9 Afghanistan Capital goods  2003   2916.   105      11.3 
10 Afghanistan Capital goods  2004   6413.   138     120.
阿富汗%>%
解组()%>%
分组依据(分组、国民账户体系、t)%>%
汇总(出口=总额(出口),
n=总和(n))%>%
突变(gr.exports=100*((导出/滞后(导出,1))-1))%>%
解组()
#A tibble:23x6
集团sna t出口和集团出口
1阿富汗资本货物1995 1195。36 NA
2阿富汗资本货物1996 1487。49      24.4 
3阿富汗资本货物1997 1525。71       2.53
4阿富汗资本货物1998 1598。50       4.80
5阿富汗资本货物1999 2688。64      68.2 
6阿富汗资本货物2000 1754。88     -34.7 
7阿富汗资本货物2001 5914。107     237.  
8阿富汗资本货物2002 2620。76     -55.7 
9阿富汗资本货物2003 2916。105      11.3 
10阿富汗资本货物2004 6413。138     120.

感谢您的努力。第一个默认值不能根据组自动设置?我是说,阿富汗,资本货物和1995年。如果增长率计算正确的话,1995年应该是不适用的。谢谢。时间维度是1995-2017年。你能在你的回答中发布
dput(baci_exports%>%filter(group==“Afganistan”,sna==“Capital goods”)
的输出吗?我想在你关于如何存储多年数据的问题中,这里有一个参考是很有用的。我添加了dput(baci_exports%>%filter(group==“Afganistan”),sna==“资本货物”)。谢谢。很抱歉,我们拼错了阿富汗。很乐意提供帮助,但“它对我不起作用”并没有提供任何信息供我尝试。您有任何错误吗?输出看起来有错吗?如果有,如何?您的输出与我的输出有相同的数据吗?
group_exports_g.rate <- baci_exports %>% ungroup() %>% 
  group_by(group,sna,t) %>% summarise(exports = sum(exports),
                                      n= sum(n)) %>% ungroup() %>% 
  group_by(group,sna,t) %>% arrange(group,sna,t) %>% 
  mutate(gr.exports = 100*((exports/lag(exports,1, 1))-1))
group_exports_g.rate
# A tibble: 20 x 6
# Groups:   group, sna, t [20]
   group       sna                                        t    exports     n gr.exports
   <chr>       <chr>                                  <dbl>      <dbl> <int>      <dbl>
 1 Afghanistan Capital goods                           1995    1195.      36    119426.
 2 Afghanistan Consumer goods                          1995   22997.     207   2299605.
 3 Afghanistan Fuels and lubricants                    1995       5.37     1       437.
 4 Afghanistan Intermediate goods                      1995    9721.     137    971956.
 5 Afghanistan Parts and accessories of capital goods  1995     184.      30     18298.
 6 Afghanistan Passenger motor cars                    1995     111.       5     11026.
 7 Afghanistan Primary goods                           1995   47976.      58   4797521.
 8 Algeria     Capital goods                           1995   30316.     270   3031502.
 9 Algeria     Consumer goods                          1995  150361.     364  15036047.
10 Algeria     Fuels and lubricants                    1995 8686043.     106 868604202.
11 Algeria     Intermediate goods                      1995  448719.     563  44871760.
12 Algeria     Parts and accessories of capital goods  1995    6634.     150    663291.
13 SE          Capital goods                           1995    5711.     143    571017.
14 SE          Consumer goods                          1995  120660.     654  12065857.
15 SE          Fuels and lubricants                    1995    2265.       5    226354.
16 SE          Goods not elsewhere specified           1995      75.8      3      7481.
17 SE          Intermediate goods                      1995   60184.     322   6018325.
18 SE          Parts and accessories of capital goods  1995    2250.      57    224882.
19 SE          Passenger motor cars                    1995     280.      12     27944.
20 SE          Primary goods                           1995   36458.     143   3645745.
baci_exports2 <- bind_rows(
  baci_exports %>% ungroup(),
  baci_exports %>% 
    ungroup() %>%
    mutate(t = 1996, 
           exports = exports * rnorm(n(), mean = 1.5, sd = 0.01))
)
cgroup_exports_g.rate <- baci_exports2 %>% 
  group_by(group,sna,t) %>% 
  summarise(exports = sum(exports),
            n= sum(n)) %>% 
  mutate(gr.exports = 100*((exports/lag(exports,1))-1)) %>%
  ungroup()


> cgroup_exports_g.rate
# A tibble: 40 x 6
   group       sna                                        t  exports     n gr.exports
   <chr>       <chr>                                  <dbl>    <dbl> <int>      <dbl>
 1 Afghanistan Capital goods                           1995  1195.      36       NA  
 2 Afghanistan Capital goods                           1996  1784.      36       49.3
 3 Afghanistan Consumer goods                          1995 22997.     207       NA  
 4 Afghanistan Consumer goods                          1996 34932.     207       51.9
 5 Afghanistan Fuels and lubricants                    1995     5.37     1       NA  
 6 Afghanistan Fuels and lubricants                    1996     8.00     1       49.0
 7 Afghanistan Intermediate goods                      1995  9721.     137       NA  
 8 Afghanistan Intermediate goods                      1996 14647.     137       50.7
 9 Afghanistan Parts and accessories of capital goods  1995   184.      30       NA  
10 Afghanistan Parts and accessories of capital goods  1996   272.      30       47.9
# ... with 30 more rows
afghanistan %>% 
  ungroup() %>%
  group_by(group,sna,t) %>% 
  summarise(exports = sum(exports),
            n= sum(n)) %>% 
  mutate(gr.exports = 100*((exports/lag(exports,1))-1)) %>%
  ungroup()

# A tibble: 23 x 6
   group       sna               t exports     n gr.exports
   <chr>       <chr>         <dbl>   <dbl> <int>      <dbl>
 1 Afghanistan Capital goods  1995   1195.    36      NA   
 2 Afghanistan Capital goods  1996   1487.    49      24.4 
 3 Afghanistan Capital goods  1997   1525.    71       2.53
 4 Afghanistan Capital goods  1998   1598.    50       4.80
 5 Afghanistan Capital goods  1999   2688.    64      68.2 
 6 Afghanistan Capital goods  2000   1754.    88     -34.7 
 7 Afghanistan Capital goods  2001   5914.   107     237.  
 8 Afghanistan Capital goods  2002   2620.    76     -55.7 
 9 Afghanistan Capital goods  2003   2916.   105      11.3 
10 Afghanistan Capital goods  2004   6413.   138     120.