Получение дубликатов в Group_by () в R

Я получаю дубликаты результатов group_by () в R. Скажем, я пытаюсь сгруппировать следующий фрейм данных по имени:

name <- c("John", "Sally", "Sally", "Sue")
sales <- c(10, 20, 5, 30)
example <- data.frame(name, sales)
print(example)

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

library(dplyr)

example %>% group_by(name) %>% select(name, sales)

Однако я продолжаю получать "Салли" дважды. Вместо этого я хочу получить Салли только один раз с ее общим объемом продаж (25). Как мне получить различные значения в моем столбце «имя»? Я гуглил весь день, так как думал, что group_by должна это сделать.

Могу ли я использовать отличный ()? Я видел похожий пост для Python ЗДЕСЬ, и главный участник сказал, что пользователь должен попробовать использовать Сортировать. Я действительно попробовал, но внезапно R Studio говорит, что не может найти "имена" объекта, когда я добавляю его, чтобы получить этот код:

example %>% sort(name) group_by(name) %>% select(name, sales)

Но когда я удаляю функцию sort (), R отлично справляется с чтением «group_by (name)». Что мне не хватает?

Спасибо


person Leondra    schedule 29.10.2018    source источник
comment
Ни group_by, ни select не должны приводить к разному количеству строк (в целом); первый просто контролирует, как некоторые из dplyr глаголов относятся к вещам, а второй влияет на количество столбцов (более или менее).   -  person r2evans    schedule 30.10.2018
comment
Другими словами, group_by изменяет способ работы последующих вычислений (т. Е. Внутри группы, а не по всем строкам), но сам по себе не изменяет фрейм данных таким образом, чтобы печатать по-другому.   -  person Jon Spring    schedule 30.10.2018


Ответы (1)


Мы можем использовать summarise для sum "продаж", сгруппированных по "имени"

example %>% 
    group_by(name) %>% 
    summarise(sales = sum(sales))
person akrun    schedule 29.10.2018
comment
Спасибо, акрун. Однако это не сработало. Позвольте мне уточнить (так как я не понимал, что остальное будет актуально до сих пор). Я хочу, чтобы конечный результат отображал больше, чем просто имя и продажи. Например, я хочу показать имя, продажи, магазин и штат (все существующие столбцы), но я хочу показать только сумму всех продаж для каждого продавца (имя). Таким образом, код будет выглядеть примерно так: «Пример%›% group_by (name)% ›% summarize (sales = sum (sales)) select (name, sales, store, state)» Теперь он говорит об ошибке в .f (. x [[i]], ...): объект "Магазин" не найден - person Leondra; 30.10.2018
comment
@Leondra Что вам может понадобиться, это example %>% group_by(name) %>% mutate(sales = sum(sales)) - person akrun; 30.10.2018
comment
По какой-то причине код, который вы предоставили выше, привел только к тому же результату, что и мой исходный код. Еще есть дубликаты :( - person Leondra; 30.10.2018
comment
@Leondra Да, это дает полные строки. Но я хочу сказать, что если вы используете distinct в конце, это поможет example %>% group_by(name) %>% mutate(sales = sum(sales)) %>% ungroup %>% distinct(name, sales, .keep_all = TRUE) - person akrun; 30.10.2018
comment
Под «концом» вы подразумеваете следование оператору mutate? Если так, то, боюсь, преобладает тот же результат. Вот что у меня есть сейчас: пример% ›% group_by (name)%›% mutate (sales = sum (sales))% ›% independent ()%›% select (name, sales, store, state) - person Leondra; 30.10.2018
comment
@Leondra У меня есть код в комментарии. Пожалуйста, проверьте. В distinct вы можете указать столбцы, в которых должны быть выбраны уникальные элементы. - person akrun; 30.10.2018
comment
Привет @akun. Спасибо, что уделили время - мы очень ценим это! Итак, я попробовал ваш измененный код, и по какой-то причине Салли все еще появляется дважды. Я думаю, что, может быть, что-то не так с моим предыдущим спорным кодом. Возможно, мне потребуется время, чтобы просмотреть. Похоже, все ваши предложения сработали бы. Я впервые сталкиваюсь с этой проблемой. Отправлю свое решение, как только приду к нему. - person Leondra; 30.10.2018
comment
@Leondra Это может быть другая проблема. Если столбец «имя» также находится в distinct, он даст только одну строку для этой «Салли». Проверьте, есть ли в столбце leading/lagging пробелов. В этом случае вам может понадобиться example %>% group_by(name = trimws(name)), а затем использовать остальную часть кода. - person akrun; 30.10.2018