1

这是我的第一篇文章,并且非常坚持尝试构建我的第一个函数,该函数使用带有公司 = obs 的面板数据(年=1998:2007)计算赫芬达尔对公司总产出的度量。按年份(1998-2007)和地区(“West”、“Central”、“East”、“NE”),并且在通过函数传递参数时遇到问题。我想我需要使用两个循环(一个用于时间,一个用于区域)。任何帮助都会很有用.. 我真的不想将我的数据子集 400 多次才能让 herfindahl 测量一次。提前致谢!

下面我提供: 1)我的起始代码(只返回一个值);2) 期望的输出(包含 1) 年和 2) 年区域的 hefindahl 度量的 2 箱);3) 原始数据

1) 我的入门代码

myherf<- function (x, time, region){
time = year # variable is defined in my data and includes c(1998:2007)
region = region # Variable is defined in my data, c("West", "Central","East","NE")
    for (i in 1:length(time)) {
      for (j in 1:length(region)) {
        herf[i,j] <- x/sum(x)
        herf[i,j] <- herf[i,j]^2
        herf[i,j] <- sum(herf[i,j])^1/2        
      }
    }
  return(herf[i,j])
}

myherf(extractiveoutput$x, i, j)
herf[i, j] <- x/sum(x) 中的错误:找不到对象“herf”


2)我想要的结果是以下两个向量:

A. (1x10 vector)              
Year  herfindahl(yr)  
1998    x                        
1999    x                       
...                             
2007    x                       

B. (1x40 vector)  
Year  Region   hefindahl(yr-region)  
1998  West      x                                     
1998  Central   x                                    
1998  East      x    
1998  NE        x    
...  
2007  West      x    
2007  Central   x  
2007  East      x   
2007  northeast x   

3) 原始数据

Obs. industry year  region    grossoutput  
1         06 1998    Central 0.048804830  
2         07 1998    Central 0.011222478  
3         08 1998    Central 0.002851575  
4         09 1998    Central 0.009515881  
5         10 1998    Central 0.0067931  
...  

12        06 1999    Central 0.050861447  
13        07 1999    Central 0.008421093  
14        08 1999    Central 0.002034649  
15        09 1999    Central 0.010651283  
16        10 1999    Central 0.007766118  
...  
111       06 1998       East 0.036787413  
112       07 1998       East 0.054958377  
113       08 1998       East 0.007390260  
114       09 1998       East 0.010766598  
115       10 1998       East 0.015843418  
...  
436       31 2007       West 0.166044176  
437       32 2007       West 0.400031011  
438       33 2007       West 0.133472059  
439       34 2007       West 0.043669662  
440       45 2007       West 0.017904620  
4

1 回答 1

1

您可以使用库中的conc函数ineq。使用data.table.

library(ineq)
library(data.table)

# convert your data.frame into a data.table
  setDT(df)

# calculate inequality of grossoutput by region and year
  df[, .(inequality = conc(grossoutput, type = "Herfindahl")), by=.(region, year) ]
于 2017-05-29T20:08:14.223 回答