2015-06-24 36 views
3

我有一個地址序列,我試圖用序號替換數字。現在我有以下。使用toOrdinal替換數字與序號

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" 

一個載體,但我無法弄清楚如何使。

+0

我猜這將適用序號指標,即 「ST」,「第二「,」rd「和」th「。 – melwil

+0

更多相關信息:http://cran.r-project.org/web/packages/toOrdinal/toOrdinal.pdf – garson

+0

你需要一個回調來構造它。或者簡單地通過循環現有數組並創建一個新列表來找到'\ d +' – sln

回答

3

對於\\ 1,您可以訪問pamentalhesis中匹配表達式的部分,但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)