Предположим, у меня есть некоторые демографические данные как таковые
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
, были бы наиболее элегантными.