如果我有
library(dplyr)
df <- data.frame(name=c("A","B","C","D"),value1=c(8,9,8,10),value2=c(1,2,3,4))
df
name value1 value2
1 A 8 1
2 B 9 2
3 C 8 3
4 D 10 4
# I want to do something like this without the error
newdf <- df %>%
mutate(rank=row_number(desc(value1),desc(value2)))
newdf
name value1 value2 rank
1 A 8 1 4
2 B 9 2 2
3 C 8 3 3
4 D 10 4 1
如何基于一列对行进行排名,如果是关系则使用第二列?
答案 0 :(得分:2)
现在我进一步了解一下,我认为这可以解决问题
df %>% arrange(desc(value1),desc(value2)) %>% mutate(rank=row_number())
答案 1 :(得分:1)
以下代码将生成您在问题中发布的相同结果。这就是row_number()
将返回的内容,但您的原始数据不必重新排列。
newdf <- df %>%
mutate(rank=order(-value1,-value2))
请注意:如果您需要dense_rank
,则此代码不会执行此操作。