如何在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)]) }
函数逻辑说明
sort(unique(x)):提取输入向量的唯一值并按升序排列,示例中得到c(1,10,50,80,90)setNames(rev(unique_sorted), unique_sorted):构建映射关系,将升序序列中的每个值对应到反转后位置的值,比如1对应90、10对应80、50对应自身、80对应10、90对应1unname(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
相关产品推荐
相关产品推荐

