首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中组合不同细节级别的聚合体

在R中组合不同细节级别的聚合体
EN

Stack Overflow用户
提问于 2017-03-24 06:49:42
回答 2查看 49关注 0票数 1

我有一张按城市和工业分列的就业表。

代码语言:javascript
运行
复制
df <- read.table(text="city industry emp
Washington Auto 2
Washington Aero 2
Boston Auto 4
Boston Aero 2", header = TRUE)

我想按城市计算一个相对多样性指数,即每个城市对所有行业的总和,即每个行业在当地就业中所占份额与其在全国就业中所占份额之间的绝对值的绝对值。这个数学看起来是这样的: RDIc =1/∑i_s_(小写字母是下标:C代表城市,I代表工业;RDI是指数;S是平均份额)。

使用上述数据,我应该得到:

代码语言:javascript
运行
复制
city       rdi
Washington   5
Boston     7.5

因为:

  • RDI Washington = 1/(abs(2/4-6/10)+abs(2/4-4/10)) =5
  • RDI Boston = 1/(abs(4/6-6/10)+abs(2/6-4/10)) = 7.5

当然,这是模拟数据,我有100多个城市和工业。我还没能在R中做到这一点,甚至在多个步骤中,除了按城市分割df,然后重新组装它,这似乎非常笨重。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-24 07:17:19

很多小步骤,但这是可行的

代码语言:javascript
运行
复制
library(dplyr)
natl = df %>%
    mutate(ind_total = sum(emp)) %>%
    group_by(industry) %>%
    summarize(si = sum(emp) / first(ind_total)) %>%
    select(industry, si)

result = df %>%
    group_by(city) %>%
    mutate(sci = emp / sum(emp)) %>%
    inner_join(natl) %>%
    group_by(city) %>%
    summarize(rdi = 1 / sum(abs(sci - si)))

result
# # A tibble: 2 × 2
#         city   rdi
#       <fctr> <dbl>
# 1     Boston   7.5
# 2 Washington   5.0
票数 2
EN

Stack Overflow用户

发布于 2017-03-24 07:30:23

这个答案是以@Gregor的好答案为基础的。我只是尝试减少步骤,所以您不需要创建另一个data.frame,然后加入它

代码语言:javascript
运行
复制
df1 <- df %>% 
  mutate(ind_total = sum(emp)) %>% 
  group_by(industry) %>% 
  mutate(si = sum(emp) / first(ind_total)) %>% 
  group_by(city) %>% 
  mutate(sci = emp / sum(emp)) %>% 
  summarise(rdi = 1 / sum(abs(sci - si)))

> df1
# A tibble: 2 × 2
        city   rdi
      <fctr> <dbl>
1     Boston   7.5
2 Washington   5.0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42993135

复制
相关文章

相似问题

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