这是我的第一篇文章,并且非常坚持尝试构建我的第一个函数,使用面板数据(年份= 1998:2007)与公司= obs计算Herfindahl对公司总产出的指标。到了年份(1998-2007)和地区(“西部”,“中部”,“东部”,“NE”),我在通过函数传递参数时遇到了问题。我想我需要使用两个循环(一个用于时间,一个用于区域)。任何帮助都是有用的..我真的不想将我的数据分组400次以获得一次一个herfindahl测量。提前谢谢!
下面我提供:1)我的入门代码(只返回一个值); 2)期望的输出(包含hefindahl措施的2个区域)年份和2)年区域); 3)原始数据
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]&lt; - 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
答案 0 :(得分:0)
您可以使用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) ]