R 选择另一列最多的列

R 选择另一列最多的列,r,sqlite,dplyr,R,Sqlite,Dplyr,我正在尝试在dplyr中重新创建以下SQLite查询: SELECT Users.DisplayName, Users.Age, Users.Location, SUM(Posts.FavoriteCount) AS FavoriteTotal, Posts.Title AS MostFavoriteQuestion, MAX(Posts.FavoriteCount) AS MostFavoriteQuestionLikes FROM Posts JOIN

我正在尝试在dplyr中重新创建以下SQLite查询:

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文档中,我读到:

旁注:聚合查询中的裸列。通常情况下,所有列名 在聚合查询中,要么是聚合函数的参数,要么出现在 按子句分组。一个结果列,其中包含的列名不在 未出现在GROUP BY子句(如果存在)中的聚合函数为 称为“裸”列

在聚合查询中使用min()或max()聚合函数时,所有 结果集中的列从同样包含最小值的输入行中获取值 或最大值。因此,在上面的查询中,输出中“b”列的值将是 输入行中具有最大“c”值的“b”列的值

因此,当引擎为用户计算最大值时,要获得他最喜欢的帖子,您所要做的就是将其写在select中

然而,我在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))
问题是,
summary
返回一个表,该表中的列仅为汇总列和分组列。这个表没有任何对posted的引用,所以我不知道如何访问它。它只有对用户的引用

我怎样才能得到我在dplyr中寻找的帖子标题

我想要的是一张桌子: 1) 有用户吗 2) 具有此用户编写的所有帖子的所有FavoriteCount之和 3) 具有此用户的最大FavoriteCount值 4) 具有此用户编写的具有此最大FavoriteCount的帖子的标题


感谢您的帮助和耐心。

如果您想在不聚合数据帧的情况下进行分组转换,只需使用mutate,而不是这样总结:

Posts %>% 
  inner_join(Users, by = c("OwnerUserId" = "Id")) %>%
  filter(PostTypeId==1) %>% 
  group_by(OwnerUserId, DisplayName, Age, Location) %>% 
  mutate(FavoriteTotal = sum(FavoriteCount), MostFavoriteQuestionLikes = max(FavoriteCount))%>% 
  arrange(desc(FavoriteTotal))
尝试:


谢谢你的回答。使用
mutate
确实可以计算一些东西,但并不完全是我想要的。现在,结果表在技术上是按用户分组的,但由于一个用户可以编写多篇文章,因此每个用户都有多行。我对这个问题进行了一些编辑,以更好地反映我的目的。@FilipBarankiewicz为了进一步帮助,请遵循Edwards的建议,发布
dput()
的输出,以便我们可以在家测试代码。请提供最小且可复制的示例以及所需的输出。对数据使用
dput()
,并使用
library()
调用指定所有非基本包。不要为数据或代码嵌入图片,而是使用缩进的代码块。
library(tidyverse)
Posts %>% 
  inner_join(Users, by = c("OwnerUserId" = "Id")) %>%
  filter(PostTypeId==1) %>% 
  group_by(OwnerUserId, DisplayName, Age, Location) %>% 
  summarise(FavoriteTotal = sum(FavoriteCount), 
            MostFavoriteQuestionLikes = max(FavoriteCount),
            MostFavoriteQuestion = unique(PostsTypeId)) %>% 
  arrange(desc(FavoriteTotal)) %>% 
  top_n(10)