Я пытаюсь воссоздать следующий запрос SQLite в dplyr:
SELECT
Users.DisplayName,
Users.Age,
Users.Location,
SUM(Posts.FavoriteCount) AS FavoriteTotal,
Posts.Title AS MostFavoriteQuestion,
MAX(Posts.FavoriteCount) AS MostFavoriteQuestionLikes
FROM Posts
JOIN Users
ON Users.Id=Posts.OwnerUserId
WHERE Posts.PostTypeId=1
GROUP BY OwnerUserId
ORDER BY FavoriteTotal DESC
LIMIT 10
Как видите, запрос выбирает наиболее понравившийся заголовок для пользователя.
В документах SQLite I прочитайте это:
Примечание: голые столбцы в совокупных запросах. Обычный случай состоит в том, что все имена столбцов в агрегированном запросе являются либо аргументами для агрегатных функций, либо появляются в предложении GROUP BY. Столбец результата, который содержит имя столбца, которого нет в статистической функции и который не указан в предложении GROUP BY (если оно существует), называется «пустым» столбцом.
Когда min () или Агрегатные функции max () используются в агрегированном запросе, все пустые столбцы в наборе результатов принимают значения из входной строки, которая также содержит минимум или максимум. Таким образом, в приведенном выше запросе значение столбца «b» в выходных данных будет значением столбца «b» во входной строке с наибольшим значением «c».
Поэтому, когда движок вычисляет максимальное значение для пользователя, все, что вам нужно сделать, чтобы получить его наиболее понравившийся пост, это просто записать его в выборку.
Однако я изо всех сил пытаюсь сделать то же самое. в dplyr.
Вот что у меня пока так:
Posts %>%
inner_join(Users, by = c("OwnerUserId" = "Id")) %>%
filter(PostTypeId==1) %>%
group_by(OwnerUserId, DisplayName, Age, Location) %>%
summarise(FavoriteTotal = sum(FavoriteCount), MostFavoriteQuestionLikes = max(FavoriteCount))%>%
arrange(desc(FavoriteTotal))
Проблема в том, что summarise
возвращает таблицу, в которой только столбцы являются суммированными и сгруппированными. Эта таблица не имеет ссылки на PostId, поэтому я не знаю, как получить к нему доступ. Он содержит только ссылку на пользователя.
Как я могу получить нужный мне Post.Title в dplyr?
Я хотел бы получить таблицу, которая: 1) имеет пользователя 2) имеет сумму всех FavoriteCount всех сообщений, написанных этим пользователем 3) имеет максимальное значение FavoriteCount для этого пользователя 4) имеет заголовок сообщения с максимальным значением FavoriteCount, записанным этим пользователем
Спасибо за вашу помощь и терпение.