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

在R语言中对数据框每行降序排序并新增列展示结果的方法

在R中实现每行数值降序排序并新增列的方法

嗨,这个需求在R里很好实现,我给你两种实用的方法,你可以根据自己的习惯来选:

第一步:先构造你的原始数据框

首先我们先把你给出的数据转换成R中的数据框:

df <- data.frame(
  Black = c(0.8, 0.3, 0.1),
  White = c(0.1, 0.6, 0.6),
  Red = c(0.07, 0, 0.25),
  Blue = c(0.03, 0.1, 0.05)
)

方法一:基础R快速实现

利用apply函数按行处理,对每行数值做降序排序,再合并回原数据框:

# 对每行数据降序排序,转置后设置列名
sorted_rows <- t(apply(df, MARGIN = 1, function(x) sort(x, decreasing = TRUE)))
colnames(sorted_rows) <- paste0("Color", 1:4)

# 合并原数据和排序后的新列
result_df <- cbind(df, sorted_rows)

方法二:tidyverse风格实现(适合数据流程化处理)

如果你习惯用dplyr这类tidyverse工具,也可以用管道流的方式实现:

library(dplyr)
library(tidyr)

result_df <- df %>%
  # 给每行添加唯一标识,方便后续分组排序
  mutate(row_id = row_number()) %>%
  # 将宽格式数据转为长格式
  pivot_longer(-row_id, names_to = "color", values_to = "value") %>%
  # 按行分组,对数值降序排名并生成Color列名
  group_by(row_id) %>%
  mutate(color_rank = paste0("Color", rank(-value, ties.method = "first"))) %>%
  # 转回宽格式
  pivot_wider(names_from = color_rank, values_from = value) %>%
  # 移除辅助的row_id列,合并回原数据
  select(-row_id) %>%
  bind_cols(df, .)

验证结果

运行完上面任意一种方法后,打印result_df就能得到你想要的格式:

print(result_df)
#   Black White   Red  Blue Color1 Color2 Color3 Color4
# 1   0.8   0.1 0.070 0.030    0.8   0.10   0.07   0.03
# 2   0.3   0.6 0.000 0.100    0.6   0.30   0.10   0.00
# 3   0.1   0.6 0.250 0.050    0.6   0.25   0.10   0.05

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:54:53