我在创建新的排名列时遇到了麻烦。我有以下数据:
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我需要基于当前的rank列创建一个新的rank列,其中达芬奇代码在具有达芬奇代码的所有行中都得到1。当出现新标题时,排名应改为2,以此类推。
我已经尝试了很多不同的排名,例如:
dt.reviews.books.new[,sales_rank_cat:=rank(title, ties.method="first"),by=title]但这会为每个标题分配一个1。
发布于 2017-03-05 22:56:01
我听起来就像你在说DaVinci代码将总是得到1,而其他的已经在排名顺序中,这样下面的标题将得到2,3,....n。
library(data.table)
newDF <- data.table(dt.reviews.books.new) %>%
newDF[, newRank := 1:.N, by = "Title"]再次提醒您,此排名假设您的书目当前按排名顺序排列。如果您的新排名是基于当前排名,我会使用sort()或arrange()来按Rank排序。
发布于 2017-03-05 23:08:28
library(dplyr)
df %>% mutate(rank = dense_rank((rank)))如果对排序号有意义,你可以使用desc
df %>% mutate(rank = dense_rank(desc(rank)))https://stackoverflow.com/questions/42609741
复制相似问题