R軟體中文數字轉換

最近在處理政府房地產實價登錄資料時,發現「樓層」相關的欄位是以中文數字型態紀錄,例如「十層」、「二十層」、「十五層」等等。上網找了一下,並沒有看到有把中文數字轉成阿拉伯數字的 R 程式,所以我就自己寫了一個。

> head(floor)
[1] “二十二層” “五層” “二十八層” “二十二層” “三層” “十六層”
> tail(floor)
[1] “二十四層” “十一層” “層” “十五層” “十五層” “七層”
> length(floor)
[1] 1959
> floor = gsub(“層”,””,floor)
> head(floor)
[1] “二十二” “五” “二十八” “二十二” “三” “十六”

> cN = c(“一”,”二”,”三”,”四”,”五”,”六”,”七”,”八”,”九”,”十”)
> eN1 = as.character(1:10)
>
> names(eN1)=cN
> eN2a = eN2b = eN3 = eN1
> eN2a[10] = “1”
> eN2b[10]=”0″
> eN3[10]=””

> eN1
一 二 三 四 五 六 七 八 九 十
“1” “2” “3” “4” “5” “6” “7” “8” “9” “10”
> eN2a
一 二 三 四 五 六 七 八 九 十
“1” “2” “3” “4” “5” “6” “7” “8” “9” “1”
> eN2b
一 二 三 四 五 六 七 八 九 十
“1” “2” “3” “4” “5” “6” “7” “8” “9” “0”
> eN3
一 二 三 四 五 六 七 八 九 十
“1” “2” “3” “4” “5” “6” “7” “8” “9” “”

library(mgsub)

library(stringr)

floor2 = NULL
for (x in floor)
{
m = str_length(x)
if (m == 1)
out = as.numeric(eN1[x])
else if (m == 2)
{
if (grepl(“^十”,x))
out = as.numeric(mgsub(x, cN, eN2a))
else
out = as.numeric(mgsub(x, cN, eN2b))
} else {
out = as.numeric(mgsub(x, cN, eN3))
}
floor2 = c(floor2,out)
}

> head(floor)
[1] “二十二” “五” “二十八” “二十二” “三” “十六”
> head(floor2)
[1] 22 5 28 22 3 16
> tail(floor)
[1] “二十四” “十一” “” “十五” “十五” “七”
> tail(floor2)
[1] 24 11 NA 15 15 7