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

如何使用dplyr计算指定列在每行所有列中的相对排名

实现方案(dplyr管道流)

推荐用rowwise() + c_across()的组合,逻辑清晰易读,完全符合tidyverse的编码规范:

# 加载dplyr包
library(dplyr)

# 示例数据
dat <- data.frame(
  Iowa = c(11, 12, 15),
  Wisconsin = c(10, 14, 12),
  Florida = c(14, 9, 11)
)

# 逐行计算Iowa的排名
out <- dat %>%
  rowwise() %>%
  # 按值从大到小排名,取Iowa对应的排名位
  mutate(IowaRank = rank(-c_across(Iowa:Florida), ties.method = "min")[["Iowa"]]) %>%
  # 取消行分组,避免影响后续数据处理
  ungroup()

逻辑说明

  • rowwise()开启逐行运算模式,对每一行单独处理
  • c_across(Iowa:Florida)指定把每行的Iowa、Wisconsin、Florida三列的值拼成一个向量参与排名,如果你后续加了其他不需要参与排名的列,调整这个范围即可
  • rank()默认值越小排名越高,加负号-实现值越大排名越靠前,和示例的排名规则匹配
  • ties.method = "min"表示遇到并列值时取最小排名,符合常规排名逻辑,有其他需求可以改成"average"(平均排名)、"max"(最大排名)等参数
  • 最后用[["Iowa"]]提取Iowa列对应的排名值即可

运行后得到的out和预期结果完全一致。如果处理超大体量数据想要更高运行效率,可以把rowwise()替换成purrr::pmap_dbl的向量化方案,常规场景下上述方案的可读性和易用性最优。

内容的提问来源于stack exchange,提问作者Natasha R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:45:01