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

使用Tidy原则填充R语言中按比例缩放的分数序列

R语言实现带缩放通用分数的Data Frame

实现步骤与代码

1. 准备初始数据与区间因子计算

先加载所需工具包,定义初始数据,再为每个等级计算对应分数区间的比例因子——比例因子公式为(上一级通用分数边界 - 当前通用分数边界)/(上一级分数边界 - 当前分数边界),其中Max等级的通用分数保持不变,因子设为0。

library(dplyr)
library(tidyr)

# 初始数据
df <- tibble(grade = c("X", "E", "D", "C", "B", "A", "Max"),
             score = c(0,17,25,33,41,48,60),
             universal = c(0,22,44,65,87,108,108))

# 计算每个等级区间的比例因子及边界
df_with_factor <- df %>%
  mutate(
    next_score = lead(score),
    next_universal = lead(universal),
    factor = ifelse(grade == "Max", 0, (next_universal - universal)/(next_score - score))
  )

2. 扩展分数序列并计算缩放通用分

生成每个等级对应的整数分数序列,再分组计算每个分数对应的通用分数:

# 扩展分数并计算每个分数对应的通用分数
result_df <- df_with_factor %>%
  # 按等级生成对应分数序列
  rowwise() %>%
  mutate(score_seq = list(score:ifelse(is.na(next_score), score, next_score - 1))) %>%
  unnest(score_seq) %>%
  # 分组计算缩放通用分
  group_by(grade) %>%
  mutate(
    offset = score_seq - first(score_seq),
    universal_scaled = first(universal) + offset * first(factor)
  ) %>%
  # 整理字段
  select(grade, score = score_seq, universal = universal_scaled) %>%
  # 补充Max等级的60分数据
  bind_rows(df %>% filter(grade == "Max")) %>%
  arrange(score)

结果说明

  • 每个整数分数的通用分数会按照对应等级区间的比例因子线性递增,例如X等级的分数从0到16时,通用分数从0开始每次增加约1.29,到17分时刚好达到22。
  • Max等级的分数从48到60时,通用分数保持108不变。

内容的提问来源于stack exchange,提问作者Rich.a.rd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:00:38