8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

将序数转换为数字

SingleNegationElimination 3月前

75 0

是否有内置方法将序数转换为数字向量?ordinal <- c(\'First\', \'Third\', \'Second\')ordinal_to_numeric(ordinal)#[1] 1 3 2ordinal2 <...

是否有内置方法将序数转换为数字向量?

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

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

人们确实可以创建一本字典,但这很容易变得麻烦。

帖子版权声明 1、本帖标题:将序数转换为数字
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由SingleNegationElimination在本站《string》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我迟到了,@DaveArmstrong 的解决方案肯定更简单,但这里有一个更通用的解决方案,首先将序数转换为基数,然后将它们传递 nombre::uncardinal() 给转换为数字。 str_replace_all() 序数 -> 基数转换的向量基于代码 nombre::ordinal() .

    library(stringr)
    library(nombre)
    
    ordinal_to_numeric <- function(x) {
      w_word_stem <- function(x) {
        x |>
        str_to_lower() |>
        str_remove("st$|nd$|rd$|th$") |>
        str_replace_all(c(
          "fir$" = "one",
          "seco$" = "two",
          "thi$" = "three",
          "f$" = "ve",
          "eigh$" = "eight",
          "nin$" = "nine",
          "ie$" = "y"
        )) |>
        uncardinal()
      }
      w_num_stem <- function(x) {
        x |>
          str_extract("^-?\\d+") |>
          as.numeric()
      }
      out <- suppressWarnings(ifelse(
        str_starts(x, "-?\\d"), 
        w_num_stem(x),
        w_word_stem(x)
      ))
      if (any(is.na(out) & !is.na(x))) {
        warning("Conversion failed for some inputs")
      }
      out
    }
    
    ordinal <- c("First", "Third", "Second", "Five Hundred Thirty Eighth", "Negative Twenty-Third")
    ordinal_to_numeric(ordinal)
    # 1   3   2 538 -23
    
    ordinal2 <- c("1st", "4th", "2nd", "538th", "-23rd")
    ordinal_to_numeric(ordinal2)
    # 1   4   2 538 -23
    
返回
作者最近主题: