我正在使用R来尝试获取每个用户最喜欢的5首歌曲。我目前有代码计算最高播放的歌曲,但我想知道如何为该用户获得接下来的4首最高播放歌曲,假设每个用户至少播放了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 :(得分:4)
您可以使用:
rev(sort(x))[1:n]
获取向量的前n
个值。如果您想要前n
个唯一值,只需添加对unique()
rev(sort(unique(x)))[1:n]
答案 1 :(得分: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)