是否有内置方法将序数转换为数字向量?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
人们确实可以创建一本字典,但这很容易变得麻烦。
并非完全内置,但您可以使用 Ritchie Sacramento 对该 english
包的建议。首先,您用单词制作一个长字符串,其中包含单词的序数值。然后,您可以在这些有序的序数值列表中找到单词的位置:
library(english)
ordinal <- c("First", "Third", "Second")
o <- ordinal(1:1000)
match(tolower(ordinal), o)
#> [1] 1 3 2
第二种方法,正如 Ritchie 所建议的,不太复杂。我使用了略有不同的方法,但最终效果是一样的。
ordinal2 <- c("1st", "4th", "2nd")
as.numeric(stringr::str_extract(ordinal2, "\\d+"))
#> [1] 1 4 2
Created on 2023-01-11 by the reprex 包 (v2.0.1)
你甚至可以将它们放在一个函数中:
ordinal_to_numeric <- function(x, max_ord=1000){
if(any(grepl("\\d", x))){
as.numeric(stringr::str_extract(x, "\\d+"))
}else{
require(english, quietly = TRUE)
o <- ordinal(seq(1,max_ord, by=1))
match(tolower(x), o)
}
}
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
Created on 2023-01-11 by the reprex 包 (v2.0.1)