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

如何在R中按行绝对值降序排序DataFrame且保留原值?

在R中按每行元素绝对值降序排序DataFrame(保留原数值)

要实现每行按元素绝对值降序排序且保留原正负值,用base R的apply函数就能直接完成,步骤如下:

  1. 构造示例数据(模拟你的输入场景):
df <- data.frame(
  col1 = c(-0.01189179, -0.04220260),
  col2 = c(0.03687456, 0.04129326),
  col3 = c(-0.12202753, -0.07178175)
)
  1. 核心排序代码:
# 逐行按绝对值降序排列,保留原数值
sorted_df <- as.data.frame(t(apply(df, 1, function(row) {
  # 生成按绝对值降序的索引,用该索引重排列当前行元素
  row[order(-abs(row))]
})))

# 还原原列名(可选,若需要保持列名一致性)
colnames(sorted_df) <- colnames(df)
  1. 查看最终结果:
    运行代码后,sorted_df即为目标输出:
print(sorted_df)
# 输出:
#          col1       col2       col3
# 1 -0.12202753 0.03687456 -0.01189179
# 2 -0.07178175 -0.04220260 0.04129326

代码逻辑说明

  • apply(df, 1, ...):指定对DataFrame的每行执行后续处理函数
  • order(-abs(row)):计算当前行元素按绝对值降序排列的索引(-abs(row)实现降序排序)
  • t(...):由于apply默认返回列优先的矩阵,转置后才能还原行结构
  • as.data.frame(...):将转置后的矩阵转回DataFrame格式

如果你习惯用tidyverse工具链,也可以用以下方式实现:

library(dplyr)
library(purrr)

sorted_df_tidy <- df %>%
  rowwise() %>%
  mutate(sorted_row = list(cur_data()[order(-abs(cur_data()))])) %>%
  unnest_wider(sorted_row) %>%
  set_names(colnames(df))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:27:31