2016-05-10 8 views
0

Die Aufgabe, die ich versuche, ist im Wesentlichen Filtern eines Datenrahmens durch die Einträge in einem anderen Datenrahmen durch Einträge in zwei Spalten. Ich habe die Datenrahmen sdata, die UserId und ClusterNum (und auch andere Spalten), und die Datenframe Benutzer, mit diesen zwei Spalten auch haben. Ich muss Benutzer filtern, indem Sie diese Paare von Spalten zusammenbringen. Ich versuchteFiltern eines Datensatzes nach einem anderen Datensatz in R mit zwei Spalten

users[users[,c("userId","ClusterNum")] %in% sdata[,c("userId","ClusterNum")],] 

aber, dass ein leeren Datenrahmen zurückgegeben.

sdata ist von Benutzern erzeugen:

cdata <- ddply(users, c("userId","ClusterNum"), summarise, 
      N = length(ClusterNum), 
      mean = mean(rating), 
      total = N*mean) 
sdata <- ddply(cdata, .(userId), function(x) x[which.max(x$total),]) 

Und Benutzer ist ein Rating-Datensatz von http://files.grouplens.org/datasets/movielens/ml-latest-small.zip

mit Filmen skalierten Daten-Set, pca erzeugt, clusterized von einem k-Means-Algorithmus.

Spalten von Daten-Set Benutzer:

colnames(users) 
    [1] "userId"  "movieId" "rating"  "timestamp" "ClusterNum" 
+2

Willkommen bei Stackoverflow. Bitte posten Sie eine [MCVE] –

+0

Sie müssen die Zeilen der Benutzer, die die gleiche userId wie sdata haben? –

+0

Zeilen von Benutzern, die dieselbe userId und dieselbe clusterNum wie sdata haben – vicebas

Antwort

0

Eigentlich habe ich eine ziemlich einfache Lösung gefunden:

matches <-users[c(which(outer(users$ClusterNum, sdata$ClusterNum, "==") & 
outer(users$userId, sdata$userId, "=="), arr.ind=TRUE)),] 
Verwandte Themen