根据其他数字列添加排名列

时间:2017-03-05 14:43:42

标签: r data.table

我在创建新的排名列时遇到了麻烦。我有以下数据:

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个。

2 个答案:

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