计算变量的5个最高值

时间:2014-03-05 21:28:38

标签: r max

我正在使用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

2 个答案:

答案 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)