这似乎必须是一项非常常见的任务,但是我在 google 或 SO 中找不到解决方案。我想根据“order.scores”应用于“dat”的顺序向“dat1”添加一个名为“rank”的列。我尝试使用 row.names(),但 rownames 基于 'dat',而不是 'dat1'。我也试过 'dat$rank <-rank(dat1)',但这会产生错误信息。
fname<-c("Joe", "Bob", "Bill", "Tom", "Sue","Sam","Jane","Ruby")
score<-c(500, 490, 500, 750, 550, 500, 210, 320)
dat<-data.frame(fname,score)
order.scores<-order(dat$score,dat$fname)
dat1<-dat[order.scores,]
最佳答案
您可以按如下方式根据排序计算排名:
dat$rank <- NA
dat$rank[order.scores] <- 1:nrow(dat)
dat
# fname score rank
# 1 Joe 500 5
# 2 Bob 490 3
# 3 Bill 500 4
# 4 Tom 750 8
# 5 Sue 550 7
# 6 Sam 500 6
# 7 Jane 210 1
# 8 Ruby 320 2
关于r - 向数据框添加排名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938172/