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

如何在R语言中实现变量值的高低位等序互换(保留原值)?

实现高低位互换映射的通用R函数

需求是保留变量内的所有值,按顺序将值进行高低位互换映射:

  • 提取变量的唯一值并按升序排列
  • 将最高值替换为最低值,次高值替换为次低值,以此类推
  • 原变量中的每个值都按照上述映射关系替换,保留原顺序

输入变量示例:

var_in <- c(10, 80, 50, 90, 10, 80, 50, 90, 1)

处理后的目标变量:

var_result <- c(80, 10, 50, 1, 80, 10, 50, 1, 90)

当然可以实现这样的通用函数,以下是基于R语言的实现方案:

通用函数实现

reverse_rank_map <- function(x) {
  # 提取唯一值并升序排序
  unique_sorted <- sort(unique(x))
  # 创建反向映射:排序后的值对应反转位置的匹配值
  map <- setNames(rev(unique_sorted), unique_sorted)
  # 对原向量完成映射替换并去除名称
  unname(map[as.character(x)])
}

函数逻辑说明

  1. sort(unique(x)):提取输入向量的唯一值并按升序排列,示例中得到c(1,10,50,80,90)
  2. setNames(rev(unique_sorted), unique_sorted):构建映射关系,将升序序列中的每个值对应到反转后位置的值,比如1对应90、10对应80、50对应自身、80对应10、90对应1
  3. unname(map[as.character(x)]):将原向量的每个值替换为映射后的值,最终得到无名称的结果向量

测试验证

var_in <- c(10, 80, 50, 90, 10, 80, 50, 90, 1)
reverse_rank_map(var_in)
# 输出结果:[1] 80 10 50  1 80 10 50  1 90

输出结果与示例中的var_result完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:48:20