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

如何对含-inf到+inf数值的R DataFrame按行排名?

解决按行排名的问题

首先得注意到你提供的DataFrame里的数值其实是字符类型的(从structure里的c("-5", "3")能看出来),所以第一步必须先把这些列转换成数值型,不然没法正确计算排名。

步骤1:转换数据类型

先把所有列转为数值型,这里用lapply就可以轻松实现:

# 转换字符列为数值型
df[] <- lapply(df, as.numeric)

步骤2:按行计算降序排名

你的需求是数值越大排名越靠前(比如第一行里2是最大的,对应排名1),而R里默认的rank()函数是升序(数值越小排名越靠前),所以我们可以通过对数值取反来实现降序排名,再用apply按行处理:

# 按行计算排名,取反后排名等价于原数值的降序排名
df_rank <- as.data.frame(t(apply(df, 1, function(x) rank(-x))))
# 保持原列名
colnames(df_rank) <- colnames(df)

验证结果

运行完上面的代码后,df_rank就会和你期望的结果完全一致:

StockA StockB StockC
1      3      1      2
2      1      2      3
3      1      3      2

如果你的R版本是4.0.0及以上,也可以直接用rank()的decreasing参数,代码会更直观:

df_rank <- as.data.frame(t(apply(df, 1, function(x) rank(x, decreasing = TRUE))))
colnames(df_rank) <- colnames(df)

这样就完美解决你的按行排名需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:47