我有一系列地址,我正在尝试用序数替换数字。现在我有以下几点。

library(toOrdinal)
addlist<-c("east 1 street", "4 ave", "5 blvd", "plaza", "43 lane" )
numstringc<-gsub("\\D", "", addlist)
numstring <-as.integer(numstringc)
ordstring<-sapply(numstring[!is.na(numstring)], toOrdinal)
ordstring
[1] "1st"  "4th"  "5th"  "43rd"

我想最终得到一个向量,上面写着
[1] "east 1st street", "4th ave", "5th blvd", "plaza", "43rd lane"

但我不知道如何做到这一点。

最佳答案

使用\\1 您可以访问括号中匹配表达式的部分,但 gsub 不允许替换中的函数,因此您必须使用包中的同名 gsubfn,这实际上不需要\\1 部分:

library(gsubfn)
addlist<-c("east 1 street", "4 ave", "5 blvd", "plaza", "43 lane" )
ordstring <- gsubfn("[0-9]+", function (x) toOrdinal(as.integer(x)), addlist)

或者,您可以使用 gregexpr 和 regmatches 来替换它们:
m <- gregexpr("[0-9]+", addlist)
regmatches(addlist, m) <- sapply(as.integer(regmatches(addlist,m)), toOrdinary)

关于regex - 使用 toOrdinal 用序数替换数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31031639/

10-12 20:35