R 计算变量的5个最高值
我使用R尝试获取每个用户最喜欢的5首歌曲,其中他们播放的歌曲最多。我目前有计算最高播放歌曲的代码,但我想知道如何为该用户获得接下来的4首最高播放歌曲,假设每个用户至少播放了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
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)