Определите, насколько близки пропорции к равномерному расщеплению - PullRequest
0 голосов
/ 04 марта 2020

У меня есть набор данных, в котором есть информация о нескольких городах. Переменные включают% жителей, представляющих несколько различных расовых категорий,% жителей нескольких секторов занятости и т. Д. c. Я пытаюсь определить для каждой категории, насколько близок каждый город к четному расслоению среди вариантов.

Итак, для расы есть 4 расы, так что город, который составляет 25% от каждой ( например) 1, в то время как город, который был на 100% белым, был бы 0. Однако, с 7 секторами занятости, каждый должен был бы быть 14,29% для идеального результата (суть в том, что я делаю это по нескольким категориям с разное количество групп в каждой категории). Мой вывод будет столбцом, который имеет некоторую цифру c, показывающую, как равномерно распределена группа, на которую я смотрю (например, раса).

Я программирую на R, поэтому решение было бы неплохо, но я готов ответить на любой вопрос.

Вот пример фрейма данных, если это полезно

testdata <- structure(list(city = c("City1", "City2", "City3", "City4"), black = c(0.4, 0.1, 0.3, 0.2), white = c(0.3, 0.7, 0.1, 0.2), hisp = c(0.2, 0.1, 0.2, 0.2),asian = c(0.1, 0.1, 0.4, 0.4), service =c(0.10, 0.14, 0.4, 0.0),tech = c(0.00, 0.14, 0.6, 0.2),govt = c(0.15, 0.14, 0.0, 0.2),nonprofit = c(0.20, 0.14, 0.0, 0.3),agriculture = c(0.05, 0.14, 0.0, 0.1),manufacturing = c(0.40, 0.14, 0.0, 0.1),marketing = c(0.10, 0.16, 0.0, 0.1)), row.names = c(NA, -4L), class = "data.frame")

1 Ответ

1 голос
/ 04 марта 2020

Вот один из способов продолжить:

Разграничить данные по категориям. В примере, которым вы поделились, у вас есть информация о двух широких категориях: раса и сектор занятости. Если у вас есть категории, вы можете получить четное число, разделив 1 на количество строк в каждой группе и вычтя его из value подарок.

library(dplyr)

testdata %>%
  tidyr::pivot_longer(cols = -city) %>%
  mutate(category=case_when(name %in% c('black', 'white', 'hisp', 'asian') ~ 'race',
                              TRUE ~ 'sectors')) %>%
  group_by(city, category) %>%
  mutate(close_ratio = abs(1/n() - value))


#   city  name          value category close_ratio
#   <chr> <chr>         <dbl> <chr>          <dbl>
# 1 City1 black          0.4  race         0.15   
# 2 City1 white          0.3  race         0.0500 
# 3 City1 hisp           0.2  race         0.0500 
# 4 City1 asian          0.1  race         0.15   
# 5 City1 service        0.1  sectors      0.0429 
# 6 City1 tech           0    sectors      0.143  
# 7 City1 govt           0.15 sectors      0.00714
# 8 City1 nonprofit      0.2  sectors      0.0571 
# 9 City1 agriculture    0.05 sectors      0.0929 
#10 City1 manufacturing  0.4  sectors      0.257  
# … with 34 more rows

close_ratio = 0 идеально, что означает, что значение точно такое же, как и для разделения. Чем больше он идет от 0, тем больше неравномерное деление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...