2015-11-25 148 views
0

有沒有辦法將R中的特殊字母轉換爲英文字母?例如:在R中將特殊字母轉換爲英文字母

Æ -> AE 
Ø -> O 
Å -> A 

編輯:我需要這種轉換的原因爲R無法看到這兩個詞是相同的:

stringdist('oversættelse','oversaettelse') 
[1] 2 
grepl('oversættelse','oversaettelse') 
FALSE 

有人10噸只使用英文字符和其他一些人不寫。爲了比較一些文本,我需要以「相同的格式」來使用它們。

+2

這些不是特殊字母,這些都是適當的拉丁字符可用。你甚至不需要Unicode來處理它們,它們是拉丁代碼頁的一部分(例如Windows 1252)。你爲什麼想把它們映射到不同的角色? –

+0

這聽起來像是一個[XY問題]的案例(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - X存在問題,但詢問假設的解決方案Y *爲什麼*你想要替換這些人物? *遇到的*實際*問題是什麼?你有沒有使用R函數來破壞文本?源數據是Unicode還是使用特定的代碼頁? –

+0

將Å轉換爲AA是一種典型慣例,甚至字母Å原來取代的字符組合更合適。 –

回答

0

您可以使用CHARTR

x <- "ØxxÅxx" 
chartr("ØÅ", "OA", x) 
[1] "OxxAxx" 

和/或GSUB

y <- "Æabc" 
gsub("Æ", "AE", y) 
[1] "AEabc" 
+0

一個簡單的字符串替換不會覆蓋所有*非ASCII字符需要轉換爲其他內容的情況 - * if *有一個實際的需要轉換 –

+0

@PanagiotisKanavos你是對的,我編輯了我的答案。 –

+0

我用chartr。它似乎正常化我想要的方式。 –

4

我最近有一個非常類似的問題,並指出了問題Unicode normalization (form C) in R : convert all characters with accents into their one-unicode-character form?

基本要點是許多這些特殊字符中存在多個unicode表示 - 這將與文本比較混淆。建議的解決方案是使用stringi程序包函數stri_trans_nfc - 它還具有支持音譯的功能stri_trans_general,這可能正是您所需要的。

+3

具體來說,就像'stri_trans_general(「ØxxÅxxÆabc」,「latin-ascii」)'。 +1 – A5C1D2H2I1M1N2O1R2T1

+1

我想知道[icuSetCollat​​e](https://stat.ethz.ch/R-manual/R-devel/library/base/html/icuSetCollat​​e.html)是否允許'grepl'匹配字符串而不改變它們?幫助頁甚至包括丹麥的例子 –

+0

@PanagiotisKanavos很好找!這甚至可以幫助我解決我最初的問題。 – bdecaf