R 计算变量的5个最高值

R 计算变量的5个最高值,r,max,R,Max,我使用R尝试获取每个用户最喜欢的5首歌曲,其中他们播放的歌曲最多。我目前有计算最高播放歌曲的代码,但我想知道如何为该用户获得接下来的4首最高播放歌曲,假设每个用户至少播放了5首歌曲。我是否必须从数据集中删除最高值并再次运行它,还是有更简单的方法 write.csv(group_by(mydata,userId) %.% summarise(favourite=max(playCount)), file="test.csv") 数据示例如下所示 userId songId

我使用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
您可以使用:

rev(sort(x))[1:n]
获取向量的顶部
n
值。如果需要顶部的
n
唯一值,只需添加对
unique()

另一种方式

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)
库(dplyr)
mydata2 1`如果你想保留第一首歌
过滤器(秩>1,秩<6)%。%
选择(用户ID、歌曲ID、播放次数)

我试试看。谢谢将
partial
参数用于
sort.int
(它调用
sort
)可能会加快速度。您也可以设置
递减=真
,或者只使用
尾部
,而不是使用
rev
。相关:
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)