2016-09-15 13 views
0

米国の各郡の各業種の雇用番号を記載したExcelシートがあります。機能に基づいて新しい列を作成する

それは次のようになります。

County Industry Employees 
a  1   49 
a  2   1 
b  1   4 
b  2   19 
... 

私は各郡の雇用のHerfindahl-Hirschman index(HHI)を計算します。私はHHIを計算し、いくつかの数字を考えるとR. を使用していることは簡単です:

hhi <- function(x) { 
    # calculate sum 
    total <- sum(x) 

    # calculate share 
    share <- x*100/total 

    # add 
    return(sum(share^2)) 

} 

ので、例えば、郡1は9608のHHI(= 98^2 + 2^2)と郡2を持っている持っていますa HHI of 7127。

しかし、その郡のHHIで新しい列を作成するにはどうすればよいですか?

答えて

4

あなたはdplyrを使用することができます。

library(dplyr) 
df %>% group_by(County) %>% mutate(HHI = sum((Employees/sum(Employees) * 100)^2)) 

# Source: local data frame [4 x 4] 
# Groups: County [2] 

# County Industry Employees  HHI 
# <fctr> <int>  <int> <dbl> 
# 1  a  1  50 9615.532 
# 2  a  2   1 9615.532 
# 3  b  1   4 7126.654 
# 4  b  2  19 7126.654 

または同等に、data.tableを使用します。

setDT(df)[, HHI := sum((Employees/sum(Employees) * 100)^2), County][] 

独自にカスタマイズした機能hhiと、それが呼び出すすべての関数はベクトル化されているので、あなたはそれを直接使用することができますmutate

df %>% group_by(County) %>% mutate(HHI = hhi(Employees)) 

か:

setDT(df)[, HHI := hhi(Employees), County][] 
+0

を使用することができますか? – wwl

+1

合計関数にna.rm = Tを指定できます。 – Psidom

3

私たちは、私が最初のアプローチを使用してNA値を無視するにはどうすればよいbase Rからave(何のパッケージが使用されていない)

df1$HHI <- with(df1, ave(Employees, County, FUN = hhi)) 
関連する問題