У меня есть набор данных:
df <- structure(list(ID = c(101188, 101192, 101193, 101196, 101198,
101202, 101203, 101206, 101211, 101212, 101216, 101219, 101220,
101222, 101223, 101224, 101226, 101227, 101228, 101229), LA = c("Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham", "Barking and Dagenham", "Barking and Dagenham",
"Barking and Dagenham"), EstablishmentGroup = c("Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools", "Local authority maintained schools",
"Local authority maintained schools")), row.names = c(NA, -20L
), class = c("tbl_df", "tbl", "data.frame"))
Если я запускаю следующий код, я ожидаю, что окончательный итог сгладит данные и скажет мне
df %>%
group_by(LA) %>%
mutate(All_schools = n()) %>%
ungroup() %>%
group_by(LA, EstablishmentGroup, All_schools) %>%
summarise(total = n(),
per = total/All_schools)
Barking and Dagenham Local authority maintained schools 20 20 1
Но вместо этого он дает мне 20 строк. Я мог бы использовать отличный, но не уверен, что я сделал неправильно.
спасибо, у меня голова запуталась с расчетом вектора. total/min(All_schools) (или максимальное | уникальное | среднее) ближе всего





Вы можете сначала суммировать количество, а затем мутировать, чтобы вычислить процент.
df %>%
group_by(LA) %>%
mutate(All_schools = n()) %>%
ungroup() %>%
group_by(LA, EstablishmentGroup, All_schools) %>%
summarise(total = n()) %>%
mutate(per = total/All_schools)
Выход:
# A tibble: 1 x 5
# Groups: LA, EstablishmentGroup [1]
LA EstablishmentGroup All_schools total per
<chr> <chr> <int> <int> <dbl>
1 Barking and Dagenham Local authority maintained schools 20 20 1
А, значит, наличие двух элементов в сводке не позволяет сжать строки? Обновлено: не совсем, просто прочитайте @r2evans выше, если у вас есть векторный расчет, результаты будут векторным ответом
Как вы думаете, почему
total/All_schoolsможет сократиться до 1 строки на группу, когда в ней 20 строк? Какую агрегацию вы ожидаете? Вы имеете в видуtotal/min(All_schools)илиtotal/sum(All_schools)илиtotal/All_schools[1]илиtotal/sample(All_schools,1)или что-то еще?