R 分组数据的增长率,3组
我试图计算分组数据的年增长率;按1)组、2)产品类别和3)年份分组 我试着按这三个参数分组,然后将增长率计算为:((x/dplyr::lag(x,1))-1)*100。但是,此操作会导致新列完全使用NAsR 分组数据的增长率,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),
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.