Тестовое задание: Наибольшее количество бесплатного вина, выдаваемое комбинацией день/водитель?
примечание: эту работу нужно выполнять только с библиотекой tidyverse - нельзя загружать никакую другую библиотеку
Нужна помощь с моим кодом:
pizza %>%
select(day,driver,free_wine)%>%
group_by(day,driver)%>%
summarise(n=sum(free_wine,na.rm = TRUE),.groups = 'drop')
Мой вывод неверен (показывает несколько позиций за каждый день). Я понимаю, что мне нужна строка кода, чтобы показать здесь максимальное значение по дням и драйверам, но я не могу понять, как это сделать, не влияя на конфигурацию groupby.
Ожидаемый выход должен быть одной строкой для каждого дня, показывающей максимальное значение -
Пример
ДеньВодитель
@RuiBarradas - max не работает, потому что для каждого дня есть несколько значений, и драйвер, который необходимо добавить, чтобы получить общее количество за каждый день для драйвера, тогда мне нужно извлечь это максимальное значение для каждого дня и опубликовать имя драйвера для этого максимальное значение
Попробуйте следующее. После добавления free_wine
сумм за водителя и день, filter
максимальных значений.
pizza %>%
group_by(day, driver) %>%
summarise(free_wine = sum(free_wine, na.rm = TRUE), .groups = 'keep') %>%
filter(free_wine == max(free_wine))
В качестве альтернативы можно снова сбрасывать группы за группой, но на этот раз только по годам.
pizza %>%
group_by(day, driver)%>%
summarise(free_wine = sum(free_wine,na.rm = TRUE),.groups = 'drop') %>%
group_by(day) %>%
filter(free_wine == max(free_wine))
добавление этого фильтра показывает только один день с максимальным значением - я хочу получить вывод на каждый день с их максимальным значением
@PrashantPawar Я считаю, что это просто вопрос изменения .groups = 'keep'
. Или сбросить группы и сгруппировать снова. Попробуйте и скажите, решило ли это проблему.
Использовать
max
вместоsum
?summarise(free_wine=max(free_wine,na.rm = TRUE), etc)
. И вам не нужноselect
сначала,group_by
иsummarise
сделают это за вас.