R 计算其他实体面板数据的百分比变化
我有一个非常大的数据框,它采用面板数据的形式。这些数据包含了各国各行业多年来的生产经济信息。我想找到一个代码,用于计算同一行业内该产出的年同比百分比变化,但将不同国家的该百分比汇总为同一行中的一个 这听起来很难解释,所以我举个例子。使用此代码:R 计算其他实体面板数据的百分比变化,r,R,我有一个非常大的数据框,它采用面板数据的形式。这些数据包含了各国各行业多年来的生产经济信息。我想找到一个代码,用于计算同一行业内该产出的年同比百分比变化,但将不同国家的该百分比汇总为同一行中的一个 这听起来很难解释,所以我举个例子。使用此代码: panel <- cbind.data.frame(industry = rep(c("Logging" , "Automobile") , each = 9) , count
panel <- cbind.data.frame(industry = rep(c("Logging" , "Automobile") , each = 9) ,
country = rep(c("Austria" , "Belgium" , "Croatia") , each = 3 , times = 2) ,
year = rep(c(2000:2002) , times = 6) ,
output = c(2,3,4,1,5,8,1,2,4,2,3,4,6,7,8,9,10,11))
我使用tidyverse计算每个行业的百分比变化:
library(tidyverse)
panel <- panel %>%
group_by(country , industry) %>%
mutate(per_change = (output - lag(output)) / lag(output))
库(tidyverse)
面板%
按(国家、行业)划分的组别%>%
变异(每变化=(输出-滞后(输出))/滞后(输出))
给予:
# A tibble: 18 x 5
# Groups: country, industry [6]
industry country year output per_change
<fct> <fct> <int> <dbl> <dbl>
1 Logging Austria 2000 2 NA
2 Logging Austria 2001 3 0.5
3 Logging Austria 2002 4 0.333
4 Logging Belgium 2000 1 NA
5 Logging Belgium 2001 5 4
6 Logging Belgium 2002 8 0.6
7 Logging Croatia 2000 1 NA
8 Logging Croatia 2001 2 1
9 Logging Croatia 2002 4 1
10 Automobile Austria 2000 2 NA
11 Automobile Austria 2001 3 0.5
12 Automobile Austria 2002 4 0.333
13 Automobile Belgium 2000 6 NA
14 Automobile Belgium 2001 7 0.167
15 Automobile Belgium 2002 8 0.143
16 Automobile Croatia 2000 9 NA
17 Automobile Croatia 2001 10 0.111
18 Automobile Croatia 2002 11 0.1
#一个tible:18x5
#组别:国家、行业[6]
行业国家/地区每变化年产量
1奥地利2000 2 NA
2奥地利2001 3 0.5
3奥地利2002 4 0.333
4比利时2000 1 NA
5比利时2001 5 4
6比利时2002 8 0.6
7克罗地亚2000 1不适用
8.2001年2月1日
9 2002年4月1日
10奥地利汽车2000 2 NA
11奥地利2001 3 0.5
12奥地利2002 4 0.333
13汽车比利时2000 6 NA
14比利时2001 7 0.167
15比利时2002 8 0.143
16克罗地亚2000 9 NA
17克罗地亚2001 10 0.111
18克罗地亚2002 11 0.1
所以我想要一个代码,为第一行NA,第二行给出2001年除奥地利(4+1)=5以外的所有伐木行业的百分比变化总和,第三行给出2002年除奥地利(0.6+1)=1.6以外的所有伐木行业的百分比变化总和,第四行NA,第五行给出2001年除比利时(1.5)以外的伐木行业的百分比变化总和
我不知道用手怎么做
还请提供一个灵活的代码,能够识别N个国家和Y个行业。您可以
- 首先根据行业和年份对“面板”表进行分组,得出“每次变化”的总和
- 其次,将此分组表与主表联接
- 最后从“分组总和”中减去“每变化”
d1<-as.data.frame(panel)
attach(panel)
d2<-aggregate(per_change~industry+year, FUN=sum)
detach(panel)
library(dplyr)
panel<-left_join(d1,d2, by=c("industry"="industry", "year"="year"))
panel$exc_per_change<-panel$per_change.y-panel$per_change.x
d1<-as.data.frame(panel)
attach(panel)
d2<-aggregate(per_change~industry+year, FUN=sum)
detach(panel)
library(dplyr)
panel<-left_join(d1,d2, by=c("industry"="industry", "year"="year"))
panel$exc_per_change<-panel$per_change.y-panel$per_change.x
> head(panel)
industry country year output per_change.x per_change.y exc_per_change
1 Logging Austria 2000 2 NA NA NA
2 Logging Austria 2001 3 0.5000000 5.500000 5.000000
3 Logging Austria 2002 4 0.3333333 1.933333 1.600000
4 Logging Belgium 2000 1 NA NA NA
5 Logging Belgium 2001 5 4.0000000 5.500000 1.500000
6 Logging Belgium 2002 8 0.6000000 1.933333 1.333333