2017-10-29 2 views
-2

Ich habe gegoogled herum, aber ich kann nicht scheinen, eine Lösung für das Problem zu finden, das ich habe. Ich habe zwei Datenrahmen, hält man Filme von ID und enthält Bewertungen für sie:R verbinden zwei Datenrahmen, Gruppe für Spalte und berechnen Mittelwert

> 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 

Die andere ist eine Sammlung von benutzerdefinierten Tags, die zu diesen Filmen hinzugefügt wurden. Es hat auch eine Spalte namens movieId, die movieId im ersten Datenrahmen entspricht.

> 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 

Was ich tun möchte, ist die mittlere Filmbewertung für jedes des Tags erhalten. Grundsätzlich ist das Äquivalent dieser SQL-Abfrage:

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; 

Ich brauche nur zwei Spalten in der Ausgabe:

 tag  mean_rating 
sci_fi   6.23 
bollywood  7.45 
action   5.75 

jedoch diese SQL-Abfrage wird niemals enden. Deshalb möchte ich es in R machen. Kann mir jemand helfen, wie ich das angehen soll? Hier

+0

Bitte fügen Sie reproduzierbaren Beispiel und fügen Sie die erwartete Ausgabe. – Sotos

+0

@Sotos Hinzugefügt die erwartete Ausgabe! Eine reproduzierbare Probe ist ziemlich schwierig, da genau das mein Problem ist. Meine Anfrage endet nie! –

Antwort

1

ist die dplyr Übersetzung des SQL-Code (Paket dplyr sollte installiert sein):

library(dplyr) 

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