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

用R转换罗马数字病理分期为阿拉伯数字结果不符,如何修正?

罗马数字病理分期转阿拉伯数字的代码修正

问题背景

要把数据框pheno_df里pathologic_stage列的罗马数字分期(比如"stage i"、"stage ii")转换成对应的阿拉伯数字(1、2等),但现有代码输出结果不符合预期。

现有代码与问题

现有代码:

pheno_df$pathologic_stage <- gsub("stage ","",pheno_df$pathologic_stage)
as.numeric(factor(pheno_df$pathologic_stage))

当前输出:

3 2 3 3 2 5

期望输出:

2 1 2 2 1 4

数据样本:

> dput(pheno_df$pathologic_stage)
c("stage ii", "stage i", "stage ii", "stage ii", "stage i", "stage iv")

问题根源

factor()函数默认按字母顺序生成水平,虽然罗马数字的字母顺序本身符合逻辑,但如果数据中存在其他分期值(比如"iii"、"v"),会导致factor的水平顺序和期望的数字映射错位;要是数据里缺某个分期,factor还会自动跳过对应水平,进一步打乱对应关系。

修正代码

手动指定factor的levels参数,明确罗马数字的顺序,保证映射准确:

# 提取罗马数字部分(保留原列,避免覆盖)
pheno_df$stage_roman <- gsub("stage ", "", pheno_df$pathologic_stage)

# 定义分期的罗马数字顺序,按需扩展
stage_order <- c("i", "ii", "iii", "iv", "v")

# 转换为指定顺序的因子,再转阿拉伯数字
pheno_df$stage_numeric <- as.numeric(factor(pheno_df$stage_roman, levels = stage_order))

测试结果

用提供的样本数据运行,输出为:

2 1 2 2 1 4

完全符合期望。

补充说明

如果数据里还有更高级的分期(比如"vi"),只要在stage_order里按顺序添加对应的罗马数字,就能自动映射到正确的阿拉伯数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:15:32