Maë*_*aël 3 r type-conversion ordinal
是否有内置方法将序数转换为数值向量?
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
Run Code Online (Sandbox Code Playgroud)
人们确实可以创建一本字典,但这很容易变得很麻烦。
不完全是内置的,但您可以使用 Ritchie Sacramento 的english软件包建议。首先,用单词制作一长串序数值。然后,您可以在这些有序值的有序列表中找到单词的位置:
library(english)
ordinal <- c("First", "Third", "Second")
o <- ordinal(1:1000)
match(tolower(ordinal), o)
#> [1] 1 3 2
Run Code Online (Sandbox Code Playgroud)
正如里奇所说,第二个不太复杂。我使用了稍微不同的方法,但最终它做了同样的事情。
ordinal2 <- c("1st", "4th", "2nd")
as.numeric(stringr::str_extract(ordinal2, "\\d+"))
#> [1] 1 4 2
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2023 年 1 月 11 日创建(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
Run Code Online (Sandbox Code Playgroud)
由reprex 包于 2023 年 1 月 11 日创建(v2.0.1)