У меня есть следующий фреймворк данных с именем selection.raw со следующей формой:
теперь меня интересует группировка фрейма данных по состоянию, поэтому, если я выполню следующую команду:
election.raw%>%group_by(state)
Я получаю следующий вывод:
Как видно, штаты не были сгруппированы, я, по сути, хочу, чтобы все штаты были вместе, а затем оттуда можно было объявить кандидата, получившего наибольшее количество голосов в каждом штате, и получить фрейм данных, который показывает победителя для каждого штата. Любая идея, почему это не работает?
Вы установили группировку, но эта группировка не изменит фрейм данных, если вы не сделаете для него какую-либо сводку. Поскольку вы не предоставили ничего воспроизводимого, вот небольшой пример.
df <- data.frame(
state = c('AZ','AZ','AZ','ID','ID'),
votes = c(10, 2, 4, 12, 23)
)
ДФ:
state votes
1 AZ 10
2 AZ 2
3 AZ 4
4 ID 12
5 ID 23
Это выведет filter
и вернет max
votes
для каждого state
.
library(dplyr)
new_df <- df %>%
group_by(state) %>%
filter(votes == max(votes))
new_df:
# A tibble: 2 x 2
# Groups: state [2]
state votes
<chr> <dbl>
1 AZ 10
2 ID 23
Если вы хотите узнать каждый процент от общего числа голосов в каждом штате...
percents <- df %>%
group_by(state) %>%
mutate(`%Total` = round(votes/sum(votes), 2)) %>%
arrange(state, desc(`%Total`))
проценты:
# A tibble: 5 x 3
# Groups: state [2]
state votes `%Total`
<chr> <dbl> <dbl>
1 AZ 10 0.62
2 AZ 4 0.25
3 AZ 2 0.12
4 ID 23 0.66
5 ID 12 0.34
group_by
по существу подмножит ваши данные для сводок. Например, если у вас есть данные о голосовании и вы фильтруете максимальное количество голосов, вы получите взамен одну запись: какое бы значение ни было самым высоким. Если вы примените group_by(state)
, каждая запись попадет в group
, которая является частью всего набора данных. Затем, если вы отфильтруете максимальное количество голосов, вы должны получить запись с наибольшим количеством голосов на группу, в этом случае state
- вы должны получить 50 записей: максимальное количество голосов на штат из-за группировки.
Смотрите добавленный контент. Если бы вы хотели получить только самые большие %Total
голоса по штатам, вы бы добавили filter(`%Total` == max(`%Total`))
Я больше имел в виду сумму процентов, которые вы выводили для каждого кандидата, так что после этого какая-то сумма по кандидату. есть ли что-то подобное для р?
Сумма процентов по штатам и кандидатам не имеет смысла. Если вы пытаетесь найти процент от общего числа голосов, поданных по всей территории США, вы, вероятно, выберете group_by(candidate)
и суммируете таким образом. У вас также может быть несколько полей в вашей группе: group_by(candidate, state)
и т. д. Если вы не знаете, как использовать функцию, попробуйте поставить ?
впереди, чтобы прочитать, что именно происходит (пример: ?group_by
)
спасибо искренне вы очень помогли
Я по существу хочу, чтобы все штаты были вместе
Переупорядочивание строк фрейма данных — это то, что делает arrange()
. group_by
не вносит никаких видимых изменений, он просто позволяет последующим вызовам других команд (мутировать, фильтровать, суммировать и т. д.) выполнять действия по группам, а не по всем данным.
# this is what you need to show all the rows together for each state
df %>% arrange(state)
Но, конечно, упорядочивать немного бессмысленно, если вы собираетесь свернуть каждое состояние в одну итоговую строку...
Чтобы получить округ с наибольшим количеством голосов в штате, ответ TTS показывает хорошую общую версию, но для общего случая получения максимального количества голосов на группу вы можете использовать slice_max
:
df %>%
group_by(state) %>%
slice_max(votes, n = 1)
интересно, что имеет гораздо больше смысла сейчас. Да договориться вроде бы тривиально в данном случае спасибо. что было бы лучше, если бы я хотел сообщить о наибольшем проценте голосов для каждого штата после подсчета голосов штата-кандидата по общему количеству голосов штата?
Я отредактировал на примере с функцией полезности slice_max
. Смотрите ответ TTS для более общего подхода.
Почему это так? также, как я мог бы сделать вышеперечисленное, но вместо этого я взял общее количество голосов за каждого кандидата и разделил их на общее количество голосов для каждого штата и вернул максимальное значение этих значений