R连接两个数据帧,按列分组并计算平均值

R连接两个数据帧,按列分组并计算平均值,r,statistics,aggregate,mean,R,Statistics,Aggregate,Mean,我在谷歌上搜索过,但似乎找不到解决问题的办法。我有两个数据帧,一个按ID保存电影,并包含它们的分级: > summary(ratings) movieId mean_rating rating_count Min. : 1 Min. : 1.000 Min. : 1.0 1st Qu.: 6796 1st Qu.: 5.600 1st Qu.: 3.0 Median : 65880

我在谷歌上搜索过,但似乎找不到解决问题的办法。我有两个数据帧,一个按ID保存电影,并包含它们的分级:

> summary(ratings)
    movieId        mean_rating      rating_count    
 Min.   :     1   Min.   : 1.000   Min.   :    1.0  
 1st Qu.:  6796   1st Qu.: 5.600   1st Qu.:    3.0  
 Median : 65880   Median : 6.471   Median :   18.0  
 Mean   : 58790   Mean   : 6.266   Mean   :  747.8  
 3rd Qu.: 99110   3rd Qu.: 7.130   3rd Qu.:  205.0  
 Max.   :131262   Max.   :10.000   Max.   :67310.0  
      rn           
 Length:26744      
 Class :character  
 Mode  :character  
另一个是添加到这些电影中的用户定义标记的集合。它还有一个名为
movieId
的列,对应于第一个数据帧中的
movieId

> summary(tags)
     userId          movieId           tag           
 Min.   :    18   Min.   :     1   Length:465564     
 1st Qu.: 28780   1st Qu.:  2571   Class :character  
 Median : 70201   Median :  7373   Mode  :character  
 Mean   : 68712   Mean   : 32628                     
 3rd Qu.:107322   3rd Qu.: 62235                     
 Max.   :138472   Max.   :131258                     
   timestamp               rn           
 Min.   :1135429210   Length:465564     
 1st Qu.:1245007262   Class :character  
 Median :1302291181   Mode  :character  
 Mean   :1298711076                     
 3rd Qu.:1366217861                     
 Max.   :1427771352  
我想做的是得到每个标签的平均电影评级。基本上,这个SQL查询的等价物是:

SELECT t.tag, AVG(r.mean_rating) FROM movielens_tags t RIGHT JOIN movielens_ratings r ON t.movieId = r.movieId GROUP BY t.tag;
我只需要输出中的两列:

      tag      mean_rating
sci_fi         6.23
bollywood      7.45
action         5.75

但是,此SQL查询永远不会结束。这就是为什么我想在R中执行此操作。有人能帮助我如何执行此操作吗?

以下是SQL代码的
dplyr
翻译(应安装包
dplyr
):


请添加可复制的示例并添加预期输出。@Sotos添加了预期输出!一个可复制的样品是相当困难的,因为这正是我的问题所在。我的疑问永远不会结束!
library(dplyr)

movielens_tags %>%
  right_join(movielens_ratings, by = "movieId") %>%
  group_by(tag) %>%
  summarise(mean_rating = mean(mean_rating)