我有一份按市和工业划分的就业表
df <- read.table(text="city industry emp
Washington Auto 2
Washington Aero 2
Boston Auto 4
Boston Aero 2", header = TRUE)
我想按城市计算相对多样性指数,即每个指数的总和 城市,在所有行业中,每个行业在当地就业中的份额与其在国家就业中的份额之间的差异的绝对值。数学看起来像这样:RDIc = 1 /Σi| Sci-Si | (小写字母是下标:c表示城市,i表示行业; RDI是指数; S表示分享)。
使用上述数据,我应该得到:
city rdi
Washington 5
Boston 7.5
由于:
当然,这是模拟数据,我有100多个城市和行业。我无法在R中做到这一点,即使是在多个步骤中,没有将df按城市分割然后重新组装,这看起来非常笨重。
答案 0 :(得分:3)
这个答案是基于@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
答案 1 :(得分:2)
许多小步骤,但这有效
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