You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中如何对dataframe(数据框)的数值数据按行排名

Base R 实现

直接通过apply按行处理即可,5000列的场景下也能正常运行:

df= data.frame(a=c(13,17,19,7,9),
           b=c(1,3,50,NA,3),
           c=c(NA,NA,NA,NA,9))

df_rank <- as.data.frame(t(apply(df, 1, function(x) {
  rank(-x, na.last = "keep", ties.method = "dense")
})))

输出结果和你给出的预期完全一致。

Tidyverse 实现

如果你习惯使用tidyverse语法,可以用rowwise+c_across实现:

library(dplyr)

df_rank <- df %>%
  rowwise() %>%
  mutate(across(everything(), ~ rank(-c_across(everything()), na.last = "keep", ties.method = "dense")[cur_column()])) %>%
  ungroup()

参数说明

  • 代码中-x代表按数值从大到小降序排名,数值最大的单元格排名为1,若需要按从小到大升序排名,去掉负号即可
  • na.last = "keep"表示保留原数据中的NA值,不参与排名计算
  • ties.method = "dense"表示相同数值的单元格排名一致,排名序号连续无空缺,匹配你给出的示例规则

内容的提问来源于stack exchange,提问作者Amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:57:04