Простая ошибка пропорции при использовании функции sum () в Tidyverse в R - PullRequest
1 голос
/ 24 апреля 2020

Я не совсем уверен, что может быть не так с функцией, которую я написал. Он использует фрейм данных gss_cat, который входит в R. Все, что я пытался сделать, это вычислить простую пропорцию, но по какой-то причине функция sum() читает каждую отдельную ячейку и использует ее в качестве выходных данных. Вот код:

by_age = gss_cat %>% filter(!is.na(age)) %>% group_by(age, marital) %>% count() %>% mutate(prop = n/sum(n))

Я ожидаю, что для каждой строки я получу пропорцию, поэтому, например, пропорция для строки 1 должна быть: $ \ frac { 89} {sum (n)} $.

Вместо этого происходит то, что я получаю 1, где также sum(n) = 89, но я ожидаю, что sum (n) суммирует все величины во всех 351 строк и использовать его в качестве выходного.

Я делал подобные вычисления раньше, и у меня не было проблем. Я не думаю, что есть проблема с именем переменной, равной "n".

1 Ответ

1 голос
/ 24 апреля 2020

Ваши данные все еще группируются, когда вы используете mutate в последней строке.

Один из способов - ungroup после count

library(dplyr)

gss_cat %>% 
  filter(!is.na(age)) %>% 
  group_by(age, marital) %>% 
  count() %>% 
  ungroup %>%
  mutate(prop = n/sum(n))

Или более простой метод - вообще не группировать и использовать переменные в count.

gss_cat %>% 
  filter(!is.na(age)) %>% 
  count(age, marital) %>% 
  mutate(prop = n/sum(n))


# A tibble: 351 x 4
#     age marital           n      prop
#   <int> <fct>         <int>     <dbl>
# 1    18 Never married    89 0.00416  
# 2    18 Married           2 0.0000934
# 3    19 Never married   234 0.0109   
# 4    19 Divorced          3 0.000140 
# 5    19 Widowed           1 0.0000467
# 6    19 Married          11 0.000514 
# 7    20 Never married   227 0.0106   
# 8    20 Separated         1 0.0000467
# 9    20 Divorced          2 0.0000934
#10    20 Married          21 0.000981 
# … with 341 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...