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

基于dplyr修改R函数,实现多场景排序排名索引生成

问题解决:支持多场景的排名索引生成函数

需求回顾

需要实现一个R函数,根据初始值列表和总槽位数生成排序后的排名索引,要求:

  • 初始值数量小于总槽位数时,空位插入连续整数(如示例1的Slot5填充3.0)
  • 所有场景下Slot1的Value必须为1或1.1
  • 代码完全迁移至dplyr并优化

原代码的核心问题

原代码填充空位时直接使用Slot的数值,会导致当Slot对应的整数已被初始值占用时,出现重复整数部分,进而打乱排序逻辑。比如初始值包含3.1、总槽位为4时,原代码会填充Slot3为3,导致3.0出现在3.1之后,不符合连续整数插入的需求。

修改后的dplyr实现代码

library(dplyr)

generate_rank_index <- function(Value, totalSlots) {
  # 输入合法性校验
  stopifnot(is.numeric(Value), is.integer(totalSlots), totalSlots > 0)
  
  # 对初始值去重并排序
  sorted_init_values <- sort(unique(Value))
  
  # 提取初始值的整数部分,确定已占用的整数
  used_integers <- as.integer(sorted_init_values)
  
  # 计算需要补充的整数数量
  need_fill <- totalSlots - length(sorted_init_values)
  
  # 生成从1开始的候选整数集合,排除已占用的,取前need_fill个作为补充值
  fill_values <- setdiff(seq(1, max(used_integers, need_fill) + need_fill), used_integers) %>%
    head(need_fill) %>%
    as.numeric()
  
  # 合并初始值与补充值,再次排序后生成结果数据框
  combined_values <- c(sorted_init_values, fill_values) %>% sort()
  
  tibble(Slot = 1:totalSlots, Value = combined_values)
}

# 测试示例1
Value1 <- c(2.1, 1.2, 1.1, 2.2)
totalSlots1 <- 5
generate_rank_index(Value1, totalSlots1)

# 测试示例2:仅1个初始值,总槽位3
Value2 <- c(1.1)
totalSlots2 <- 3
generate_rank_index(Value2, totalSlots2)

# 测试示例3:初始值无1开头,总槽位4
Value3 <- c(3.1, 2.2)
totalSlots3 <- 4
generate_rank_index(Value3, totalSlots3)

代码逻辑说明

  1. 输入校验:确保输入为合法的数值向量和正整数槽位数,提升函数健壮性
  2. 初始值处理:去重并排序,避免重复值干扰排名逻辑
  3. 补充值生成:从1开始筛选未被初始值占用的连续整数,填补空位,保证整数序列的连续性
  4. 合并排序:将初始值与补充值合并后重新排序,确保整体顺序符合要求
  5. Slot1规则满足:由于补充值从1开始选取,排序后的第一个元素必然是1或1.x(若初始值包含1开头的数值),完全符合要求

测试输出

  • 示例1输出:
# A tibble: 5 × 2
   Slot Value
  <int> <dbl>
1     1   1.1
2     2   1.2
3     3   2.1
4     4   2.2
5     5   3.0
  • 示例2输出:
# A tibble: 3 × 2
   Slot Value
  <int> <dbl>
1     1   1.1
2     2   2.0
3     3   3.0
  • 示例3输出:
# A tibble: 4 × 2
   Slot Value
  <int> <dbl>
1     1   1.0
2     2   2.2
3     3   3.1
4     4   4.0

内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:36