我在创建新的排名列时遇到了麻烦。我有以下数据:
Title Cat. Rank
The Da Vinci Code Book 19
The Da Vinci Code Book 19
The Da Vinci Code Book 19
Sisterhood.... Book 21
Book X Book 34
Book X Book 34
我需要根据当前排名列创建一个新的排名列,其中Da Vinci代码在所有行中使用da vinci代码获得1。当出现新标题时,排名应改为2等。
我一直在尝试很多等级变化,例如:
dt.reviews.books.new[,sales_rank_cat:=rank(title, ties.method="first"),by=title]
但是这会给每个冠军分配1个。
答案 0 :(得分:0)
听起来像你说DaVinci Code总是收到1而其他人已经按照排名顺序排列,以便下列标题将获得2,3,.... n。
library(data.table)
newDF <- data.table(dt.reviews.books.new) %>%
newDF[, newRank := 1:.N, by = "Title"]
再次并警告,此排名假设您的标题目前处于排名顺序。如果您的新排名基于当前排名,我会使用sort()
或arrange()
按Rank
排序。
答案 1 :(得分:0)
library(dplyr)
df %>% mutate(rank = dense_rank((rank)))
如果对排名号有意义,可以使用desc
:
df %>% mutate(rank = dense_rank(desc(rank)))