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