dplyr_generate новый столбец, который принимает процент от логических строк - PullRequest
0 голосов
/ 22 марта 2020

У меня очень большой набор данных с несколькими столбцами, но я выберу только 2 столбца: Уровень образования родителей и Пол.

    parent_edu             gender     n
        <chr>              <chr>  <int>
     1 associate's degree female   116
     2 associate's degree male     106
     3 bachelor's degree  female    63
     4 bachelor's degree  male      55
     5 high school        female    94
     6 high school        male     102
     7 master's degree    female    36
     8 master's degree    male      23
     9 some college       female   118
    10 some college       male     108
    11 some high school   female    91
    12 some high school   male      88

С этого момента мне нужно использовать функцию count для создания нового столбца n , который подсчитывает, сколько женщин имеют родителей с таким уровнем образования и сколько мужчин имеют родители с таким уровнем образования.

    student1 %>%
    count(parent_edu, gender) %>%

Последний шаг - попытка получить последний столбец, который имеет средние значения в пределах этих разных уровней образования для разных полов. Так, например, у нас есть «какой-то колледж», и есть 52% женщин и 48% мужчин, а затем, возможно, «средняя школа» и 47% женщин и 53% мужчин. До сих пор я неэффективно использую функцию mutate следующим образом:

    student1 %>%
    count(parent_edu, gender) %>%
    mutate(percentage = 

Может кто-нибудь немного подсказать мне, какое уравнение мне следует ввести там? Или используйте pipe для добавления каких-либо других функций? Окончательный результат должен выглядеть следующим образом:

    parent_edu         gender      n      percentage
    <chr>              <chr>      <int>    <dbl>
    associate's degree  female    116      0.52
    associate's degree  male      106      0.48
    bachelor's degree   female    63       0.53
    bachelor's degree   male      55       0.47
    high school         female    94       0.48
    high school         male      102      0.52
    master's degree     female    36       0.61
    master's degree     male      23       0.39
    some college        female    118      0.52
    some college        male      108      0.48

Включая dput:

df <- structure(list(parent_edu = c("associate's degree", "associate's degree", 
"bachelor's degree", "bachelor's degree", "high school", "high school", 
"master's degree", "master's degree", "some college", "some college"
), gender = c("female", "male", "female", "male", "female", "male", 
"female", "male", "female", "male"), n = c(116, 106, 63, 55, 
94, 102, 36, 23, 118, 108)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame")) 

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Окончательный ответ был таким:

    student1 %>%
    count(parent_edu, gender) %>%
    group_by(parent_edu) %>% # grouping by parent education 
    mutate(total = sum(n)) %>% # total within groups
    mutate(percentage = (n/total)) %>% # calculating percentage
    mutate(percentage = round(percentage, 2)) %>% # rounding to match your example
    select(-total) # dropping the total column
0 голосов
/ 22 марта 2020

Обновленная версия:

dput

df <- structure(list(parent_edu = c("associate's degree", "associate's degree", 
"bachelor's degree", "bachelor's degree", "high school", "high school", 
"master's degree", "master's degree", "some college", "some college"
), gender = c("female", "male", "female", "male", "female", "male", 
"female", "male", "female", "male"), n = c(116, 106, 63, 55, 
94, 102, 36, 23, 118, 108)), row.names = c(NA, -10L), class = c("tbl_df", 
"tbl", "data.frame")) 

Решение:

df <- df %>%
  group_by(parent_edu) %>% # grouping by parent education 
  mutate(total = sum(n)) %>% # total within groups
  mutate(percentage = (n/total)) %>% # calculating percentage
  mutate(percentage = round(percentage, 2)) %>% # rounding to match your example
  select(-total) # dropping the total column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...