我有一张按城市和工业分列的就业表。
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是平均份额)。
使用上述数据,我应该得到:
city rdi
Washington 5
Boston 7.5
因为:
当然,这是模拟数据,我有100多个城市和工业。我还没能在R中做到这一点,甚至在多个步骤中,除了按城市分割df,然后重新组装它,这似乎非常笨重。
发布于 2017-03-24 07:17:19
很多小步骤,但这是可行的
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
发布于 2017-03-24 07:30:23
这个答案是以@Gregor的好答案为基础的。我只是尝试减少步骤,所以您不需要创建另一个data.frame,然后加入它
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
https://stackoverflow.com/questions/42993135
复制相似问题