【R】字符型數據及處理

字符型向量

字符型向量是元素爲字符串的向量。 如

> s1 <- c('abc', '', 'a cat', NA, '李明')

注意空字符串並不能自動認爲是缺失值, 字符型的缺失值仍用NA表示。

paste()函數

針對字符型數據最常用的R函數是paste()函數。 paste()用來連接兩個字符型向量, 元素一一對應連接, 默認用空格連接。 如paste(c("ab", "cd"), c("ef", "gh")) 結果相當於c("ab ef", "cd gh")。

paste()在連接兩個字符型向量時採用R的一般向量間運算規則, 而且可以自動把數值型向量轉換爲字符型向量。 可以作一對多連接, 如paste("x", 1:3)結果相當於c("x 1", "x 2", "x 3")。

用sep=指定分隔符, 如paste("x", 1:3, sep="")結果相當於c("x1", "x2", "x3")。

使用collapse=參數可以把字符型向量的各個元素連接成一個單一的字符串, 如paste(c("a", "b", "c"), collapse="")結果相當於"abc"。

轉換大小寫

toupper()函數把字符型向量內容轉爲大寫, tolower()函數轉爲小寫。 比如,toupper('aB cd')結果爲"AB CD", tolower(c('aB', 'cd'))結果相當於c("ab" "cd")。 這兩個函數可以用於不區分大小寫的比較, 比如,不論x的值是'JAN', 'Jan'還是'jan', toupper(x)=='JAN'的結果都爲TRUE。

字符串長度

用nchar(x, type='bytes')計算字符型向量x中每個字符串的以字節爲單位的長度,這一點對中英文是有差別的, 中文通常一個漢字佔兩個字節,英文字母、數字、標點佔一個字節。 用nchar(x, type='chars')計算字符型向量x中每個字符串的以字符個數爲單位的長度,這時一個漢字算一個單位。

在畫圖時可以用strwidth()函數計算某個字符串或表達式佔用的空間大小。

取子串

substr(x, start, stop)從字符串x中取出從第start個到第stop個的子串, 如

> substr('JAN07', 1, 3)
## [1] "JAN"

如果x是一個字符型向量,substr將對每個元素取子串。如

> substr(c('JAN07', 'MAR66'), 1, 3)
## [1] "JAN" "MAR"

用substring(x, start)可以從字符串x中取出從第start個到末尾的子串。如

> substring(c('JAN07', 'MAR66'), 4)
## [1] "07" "66"

類型轉換##

用as.numeric()把內容是數字的字符型值轉換爲數值,如

> substr('JAN07', 4, 5)
## [1] "07"

> substr('JAN07', 4, 5) + 2000
## Error in substr("JAN07", 4, 5) + 2000 : 
##   non-numeric argument to binary operator

> as.numeric(substr('JAN07', 4, 5)) + 2000
## [1] 2007

> as.numeric(substr(c('JAN07', 'MAR66'), 4, 5))
## [1]  7 66

as.numeric()是向量化的, 可以轉換一個向量的每個元素爲數值型。

用as.character()函數把數值型轉換爲字符型,如

> as.character((1:5)*5)
## [1] "5"  "10" "15" "20" "25"

如果自變量本來已經是字符型則結果不變。

爲了用指定的格式數值型轉換成字符型, 可以使用sprintf()函數, 其用法與C語言的sprintf()函數相似, 只不過是向量化的。例如

> sprintf('file%03d.txt', c(1, 99, 100))
## [1] "file001.txt" "file099.txt" "file100.txt"

字符串拆分

用strsplit()函數可以把一個字符串按照某種分隔符拆分開,例如

> x <- '10,8,7'
> strsplit(x, ',', fixed=TRUE)[[1]]
## [1] "10" "8"  "7"

> sum(as.numeric(strsplit(x, ',', fixed=TRUE)[[1]]))
## [1] 25

因爲strsplit()的結果是一個列表, 這個函數延後再詳細講。

字符串替換功能

用gsub()可以替換字符串中的子串, 這樣的功能經常用在數據清理中。 比如,把數據中的中文標點改爲英文標點, 去掉空格,等等。 如

> x <- '1, 3; 5'
> gsub(';', ',', x, fixed=TRUE)
## [1] "1, 3, 5"

> strsplit(gsub(';', ',', x, fixed=TRUE), ',')[[1]]
## [1] "1"  " 3" " 5"

字符串x中分隔符既有逗號又有分號, 上面的程序用gsub()把分號都換成逗號。

正則表達式

正則表達式(regular expression)是一種匹配某種字符串模式的方法。 用這樣的方法,可以從字符串中查找某種模式的出現位置, 替換某種模式,等等。 這樣的技術可以用於文本數據的預處理, 比如用網絡爬蟲下載的大量網頁文本數據。 R中支持perl語言格式的正則表達式, grep()和grepl()函數從字符串中查詢某個模式, sub()和gsub()替換某模式。 比如, 下面的程序把多於一個空格替換成一個空格

> gsub('[[:space:]]+', ' ', 'a   cat  in a box', perl=TRUE)
## [1] "a cat in a box"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章