首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于函数创建新列

基于函数创建新列
EN

Stack Overflow用户
提问于 2016-09-15 23:22:47
回答 2查看 1.3K关注 0票数 1

我有一个Excel表格,其中包含美国每个县的每个行业的就业人数。

它看起来是这样的:

代码语言:javascript
复制
County   Industry  Employees
a        1         49
a        2         1
b        1         4
b        2         19
...

我想计算一下每个县的就业指数( Herfindahl-Hirschman index )。我使用R。给定一些数字,计算HHI很简单:

代码语言:javascript
复制
hhi <- function(x) {
  # calculate sum
  total <- sum(x)
  
  # calculate share
  share <- x*100/total
  
  # add
  return(sum(share^2))
  
}

因此,例如,县1的HHI为9608 (= 98^2 + 2^2),县2的HHI为7127。

但是,如何使用该县的HHI创建新的专栏呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-15 23:27:01

您可以使用dplyr

代码语言:javascript
复制
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

代码语言:javascript
复制
setDT(df)[, HHI := sum((Employees/sum(Employees) * 100)^2), County][]

使用您自己的自定义函数hhi,因为它调用的所有函数都是矢量化的,所以您可以直接在mutate中使用它

代码语言:javascript
复制
df %>% group_by(County) %>% mutate(HHI = hhi(Employees))

或者:

代码语言:javascript
复制
setDT(df)[, HHI := hhi(Employees), County][]
票数 6
EN

Stack Overflow用户

发布于 2016-09-15 23:30:29

我们可以从base R使用ave (不使用包)

代码语言:javascript
复制
df1$HHI <- with(df1, ave(Employees, County, FUN = hhi))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39514827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档