Подсчитать все значения, найденные в сгруппированном кадре данных - PullRequest
0 голосов
/ 03 июля 2018

Предположим, у меня есть некоторые демографические данные как таковые

demographic.data <- data.frame(nation=c('us', 'us', 'us', 'us', 'us', 'china', 'china', 'china'),
                               religion=c('christ', 'budhist', 'christ', 'jew', 'jew', 'christ', 'budhist', 'budhist'))

#  nation religion
#1     us   christ
#2     us  budhist
#3     us   christ
#4     us      jew
#5     us      jew
#6  china   christ
#7  china  budhist
#8  china  budhist

Я хочу вычислить массовую функцию для религий в каждой нации. Таким образом, я мог бы сделать что-то вроде group_by() нации и затем объединить в кучу sum() с.

religion.distributions <- demographic.data %>%
  group_by(nation) %>%
  summarise(n       = n(),
            christ  = sum(religion == 'christ'),
            jew     = sum(religion == 'jew'),
            budhist = sum(religion == 'budhist'))

#  nation     n christ   jew budhist
#
#1 china      3      1     0       2
#2 us         5      2     2       1

Хотя это дает правильный результат для этих данных, проблема в том, что я обязан жестко кодировать религии, которые я хочу обобщить. Это будет проблемой, если в данных появятся новые религии.

Есть ли способ автоматически иметь столбцы для подсчета каждой религии в каждой группе? Он должен иметь возможность просмотреть все возможные значения в столбце religion и начать их подсчет. Решения, использующие конвейер dplyr, были бы наиболее элегантными.

1 Ответ

0 голосов
/ 03 июля 2018

Мы можем использовать spread с count

library(tidyverse)
demographic.data %>% 
    group_by(nation) %>% 
    mutate(n = n()) %>% 
    count(nation, religion, n) %>% 
    spread(religion, nn, fill = 0)
# A tibble: 2 x 5
# Groups:   nation [2]
#  nation     n budhist christ   jew
#  <fct>  <int>   <dbl>  <dbl> <dbl>
#1 china      3       2      1     0
#2 us         5       1      2     2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...