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

R语言中是否有内置方法将序数转换为数值向量?

在R语言中将序数转换为数值向量的方法

R语言本身没有内置函数直接实现序数到数值向量的转换,但可以通过简洁的代码或第三方包完成,无需手动编写繁琐的字典。

1. 处理英文序数词(如"First"/"Second")

可以借助english包自动生成序数词与数值的映射,避免手动编写字典:

先安装并加载包(未安装时执行):

install.packages("english")
library(english)

执行转换:

ordinal <- c("First", "Third", "Second")
# 生成1-20的英文序数词映射,可按需扩展数字范围
ordinal_map <- setNames(1:20, as.character(english(1:20, ordinal = TRUE)))
as.numeric(ordinal_map[ordinal])
# [1] 1 3 2

也可直接用match函数简化:

as.numeric(match(ordinal, as.character(english(1:20, ordinal = TRUE))))
# [1] 1 3 2

2. 处理带后缀的数字序数(如"1st"/"4th")

这种情况用正则表达式提取数字部分即可,无需额外包:

ordinal2 <- c("1st", "4th", "2nd")
as.numeric(sub("[^0-9]", "", ordinal2))
# [1] 1 4 2

整合两种情况的通用函数

可以编写一个函数自动识别输入类型并完成转换:

ordinal_to_numeric <- function(x) {
  # 判断是否为纯英文序数词
  if (all(grepl("^[A-Za-z]+$", x))) {
    require(english)
    ordinal_map <- setNames(1:20, as.character(english(1:20, ordinal = TRUE)))
    res <- as.numeric(ordinal_map[x])
  }
  # 判断是否为带后缀的数字序数
  else if (all(grepl("^[0-9]+[a-z]+$", x))) {
    res <- as.numeric(sub("[^0-9]", "", x))
  }
  else {
    stop("不支持的输入格式,请输入纯英文序数词或带后缀的数字序数")
  }
  return(res)
}

# 测试函数
ordinal <- c("First", "Third", "Second")
ordinal_to_numeric(ordinal)
# [1] 1 3 2

ordinal2 <- c("1st", "4th", "2nd")
ordinal_to_numeric(ordinal2)
# [1] 1 4 2

内容的提问来源于stack exchange,提问作者Maël

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:00:47