R 选择另一列最多的列
我正在尝试在dplyr中重新创建以下SQLite查询: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
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)