Dplyr не работает при вызове group_by для столбца состояний

У меня есть следующий фреймворк данных с именем selection.raw со следующей формой:

теперь меня интересует группировка фрейма данных по состоянию, поэтому, если я выполню следующую команду:

election.raw%>%group_by(state)

Я получаю следующий вывод:

Как видно, штаты не были сгруппированы, я, по сути, хочу, чтобы все штаты были вместе, а затем оттуда можно было объявить кандидата, получившего наибольшее количество голосов в каждом штате, и получить фрейм данных, который показывает победителя для каждого штата. Любая идея, почему это не работает?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
172
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы установили группировку, но эта группировка не изменит фрейм данных, если вы не сделаете для него какую-либо сводку. Поскольку вы не предоставили ничего воспроизводимого, вот небольшой пример.

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 и вернет maxvotes для каждого 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

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

user11920824 14.12.2020 21:57
group_by по существу подмножит ваши данные для сводок. Например, если у вас есть данные о голосовании и вы фильтруете максимальное количество голосов, вы получите взамен одну запись: какое бы значение ни было самым высоким. Если вы примените group_by(state), каждая запись попадет в group, которая является частью всего набора данных. Затем, если вы отфильтруете максимальное количество голосов, вы должны получить запись с наибольшим количеством голосов на группу, в этом случае state - вы должны получить 50 записей: максимальное количество голосов на штат из-за группировки.
TTS 14.12.2020 22:01

Смотрите добавленный контент. Если бы вы хотели получить только самые большие %Total голоса по штатам, вы бы добавили filter(`%Total` == max(`%Total`))

TTS 14.12.2020 22:07

Я больше имел в виду сумму процентов, которые вы выводили для каждого кандидата, так что после этого какая-то сумма по кандидату. есть ли что-то подобное для р?

user11920824 14.12.2020 22:22

Сумма процентов по штатам и кандидатам не имеет смысла. Если вы пытаетесь найти процент от общего числа голосов, поданных по всей территории США, вы, вероятно, выберете group_by(candidate) и суммируете таким образом. У вас также может быть несколько полей в вашей группе: group_by(candidate, state) и т. д. Если вы не знаете, как использовать функцию, попробуйте поставить ? впереди, чтобы прочитать, что именно происходит (пример: ?group_by)

TTS 14.12.2020 22:33

спасибо искренне вы очень помогли

user11920824 14.12.2020 22:39

Я по существу хочу, чтобы все штаты были вместе

Переупорядочивание строк фрейма данных — это то, что делает 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)

интересно, что имеет гораздо больше смысла сейчас. Да договориться вроде бы тривиально в данном случае спасибо. что было бы лучше, если бы я хотел сообщить о наибольшем проценте голосов для каждого штата после подсчета голосов штата-кандидата по общему количеству голосов штата?

user11920824 14.12.2020 21:59

Я отредактировал на примере с функцией полезности slice_max. Смотрите ответ TTS для более общего подхода.

Gregor Thomas 14.12.2020 22:07

Другие вопросы по теме

Функция мутации: сортировка строки символов и удаление повторяющихся символов
Фильтровать строки в фрейме данных в R после первого экземпляра определенного значения столбца с использованием dplyr
R dplyr: проблема с преобразованием столбца из символьного в целое число с помощью dplyr
Как мне написать функцию с помощью dplyr, которая позволит мне выполнять различные наборы вычислений?
Как мне правильно использовать tryCatch() и игнорировать ошибки 404 в этой функции rvest?
Сопоставьте «joint_tests» со списком после установки модели «gls»
Объединение двух наборов данных с использованием as_label / as_name вместо quo_name в рамках left_join dplyr
Версия таблицы данных dplyr group_by
Агрегируйте значения в строках, зависящие от значений в другом столбце, используя r
Как в фрейме данных выбрать определенные переменные для дальнейших вычислений, основываясь исключительно на их именах?