2014-03-05 38 views
2

我正在使用R來嘗試獲取每個用戶最喜歡的5首歌曲,他們所播放的歌曲最多。我目前有代碼來計算最高的播放歌曲,但我想知道如何獲得該用戶的下4個最高播放歌曲,假設每個用戶播放了至少5首歌曲。我是否必須從數據集中刪除最高值並再次運行它,還是有更簡單的方法?計數變量的5個最高值

write.csv(group_by(mydata,userId) %.% 
summarise(favourite=max(playCount)), file="test.csv") 

數據的一個例子是這樣的

userId  songId   playCount 
A   568r    85 
A   711g    18 
C   34n    18 
E   454j    65 
D   663a    72 
B   35d    84 
A   34c    72 
A   982s    65 
E   433f    11 
A   565t    7 
+0

相關:[*找到第二(三...)最高/最低值的最快方法在向量或列*](http://stackoverflow.com/questions/2453326/fastest-way-to-find-second-third-highest-lowest-value-in-vector-or-column/) –

回答

3

您可以使用:

rev(sort(x))[1:n] 

得到一個向量的頂部n值。如果你想上n唯一值,只需添加一個電話unique()

rev(sort(unique(x)))[1:n] 
+0

我會嘗試一下。謝謝! – Cormac

+2

它可能會加速一些事情來使用'sort.int'的'partial'參數(即'sort'調用)。而不是使用'rev',你可以設置'decrease = TRUE',或者只使用'tail'。 –

2

另一種方式......

library(dplyr) 

mydata2 <- group_by(mydata, userId) %.% 
       arrange(userId, -playCount) %.% 
       mutate(rank = rank(-playCount)) %.% 

       # remove `rank > 1` if you want to keep the first song 
       filter(rank > 1, rank < 6) %.% 

       select(userId, songId, playCount) 
相關問題