2016-06-15 41 views
2

確定字符串是否包含非羅馬字符/非英文字符的首選方法是什麼(例如,是否爲)字符?如何確定字符串是否包含R中的非羅馬字符

+0

您的問題不屬於好到現場指導。改述它,讓你問問怎麼做,更重要的是,展示你到目前爲止所嘗試過的。就目前來看,這個問題相當廣泛,並且「尋找工具」。 –

+0

我不明白downvote。看起來像一個完全合理的問題,並且不能立即在搜索中找到。我總是很難找到char-to-integer函數。我永遠不會記得它是char2Int,charToInt,chr2Int還是別的......因爲它沒有或那些。 –

回答

4

你可以決定是否字符串包含iconvgrep

# My example, because you didn't add your data 
characters <- c("ないでさ, satisfação, катынь, Work, Awareness, Potential, für") 
# First you convert string to vector of words 
characters.unlist <- unlist(strsplit(characters, split=", ")) 
# Then find indices of words with non-ASCII characters using ICONV 
characters.non.ASCII <- grep("characters.unlist", iconv(characters.unlist, "latin1", "ASCII", sub="characters.unlist")) 
# subset original vector of words to exclude words with non-ASCII characters 
data <- characters.unlist[-characters.non.ASCII] 
# convert vector back to a string 
dat.1 <- paste(data, collapse = ", ") 

# Now if you run 
characters.non.ASCII 
[1] 1 2 3 7 

非拉丁/非ASCII字符意味着第一,第二,第三和第七個索引是非ASCII字符,在我的情況下,第1,2,3和7個對應於:「ないでさ,satisfação,катыньand furr

您也可以運行

dat.1 #and the output will be all ASCII charaters 
[1] "Work, Awareness, Potential" 
5

你可以使用正則表達式/ grep來檢查字符的十六進制值的可打印的ASCII字符範圍之外:

x <- 'ないでさ' 
grep("[^\x20-\x7F]",x) 
#[1] 1 
grep("[^\x20-\x7F]","Normal text") 
#integer(0) 

如果你希望允許非打印(「控制」)來考慮「英語」,你可以將字符類的範圍擴展到第一個參數grep以「\ x01」開始。有關使用字符類別參數的更多信息,請參閱?regex。有關如何將字符指定爲Unicode,十六進制或八進制值的更多信息,請參閱?Quotes

的R.oo包具有轉換功能,可能是有用的:

library(R.oo) 
?intToChar 
?charToInt 

是亨里克特鬆認爲應該包括這些在他的包,這一事實對我說,沒有一個方便的方法來做到這一點基地/默認R.他是一個長期使用R/guRu。

看到對方的回答促使這一努力似乎直截了當:

> is.na(iconv(c(x, "OrdinaryASCII") , "", "ASCII")) 
[1] TRUE FALSE 
+0

0x7F可能不可打印。 – sln

+0

難道這不取決於我們正在談論的輸出設備嗎? TTY可能會退格。 R控制檯從'iconv(「\ x7f」,「」,ASCII「)中返回」\ 177「(八進制),這與'R.oo :: intToChar(0x7f)'返回的相同。 –

+0

我認爲這是DEL控制代碼,但確定任何控制代碼都會影響輸出設備。 7位ASCII碼是0x00-0x7F – sln

相關問題