文本數據存儲在字符向量中,字符向量的每個元素都是字符串,而非單獨的字符。在R中,可以使用雙引號,或單引號表示字符。
一,字符串中的字符數量
函數nchar()用於獲得字符串中的字符數量:
> s <- 'read' > nchar(s) [1] 4
二,轉義字符
R語言使用“\”,把特定的字符轉義為特殊字符,例如 “\t”是制表符,換行符是“\n”,或者 “\r\n”,通常情況下,\r是回車符,把光標移動到當前行的開始,並覆蓋當前行已經存在的數據,而\n是換行,把光標移動到一下行;
常用的轉義字符是:使用兩個“\\”,打印“\”;在字符串中包含雙引號或單引號,使用“\"”,或“\'”;如果在雙引號中使用單引號,或者在單引號中使用雙引號,那么不需要對引號進行轉義,R會打印引號。
三,更改字符的大小寫
toupper()和tolower()函數,用於把字符串中的字符全部轉換為大寫或小寫:
> toupper('Vic')
[1] "VIC" > tolower('Vic') [1] "vic"
四,拼接字符
函數paste()用於把不同的字符向量組合起來,傳遞的參數是字符向量,返回的數據類型是字符向量:
paste (..., sep = " ", collapse = NULL)
paste()函數按照向量元素的位置順序,把向量中的元素拼接在一起,中間以sep參數(默認值是空格)分割,collapse參數用於把結果向量(字符向量)的各個元素折疊成一個單獨的字符串,使用collapse指定的字符把結果向量的各個元素拼接在一起:
> paste(c('red','yellow'),'lorry') [1] "red lorry" "yellow lorry" > paste(c('red','yellow'),c('lorry','car')) [1] "red lorry" "yellow car" > paste(c('red','yellow'),c('lorry','car'),collapse=',') [1] "red lorry,yellow car"
五,截取字符串
substr或substring函數用於從字符串中截取子串,字符串的位置從1開始,
substr(x, start, stop) substring(text, first, last = 1000000L)
1,當start和stop是正整數時,substr和substring函數的行為是相同的:
> substr('R is free software',1,6) [1] "R is f" > substring('R is free software',1,6) [1] "R is f"
2,當start和stop是向量時,substr和substring函數的行為是不相同的:
> substring('R is free software',1:4,6:9) [1] "R is f" " is fr" "is fre" "s free" > substr('R is free software',1:4,6:9) [1] "R is f"
六,分割字符串
函數strsplit用於按照指定的字符把長的字符串分割成斷的子字符串,
strsplit(x, split, fixed = FALSE)
參數split是用於分割字符串,當參數fixed為TRUE時,表示字符串完全匹配split分隔符;當fixed參數為FALSE時,表示參數split是包含正則表達式的字符,使用正則匹配。函數返回的結果是字符列表,一個列表項對應一個字符串。
> strsplit('ab,cd,ef',',') [[1]] [1] "ab" "cd" "ef"
七,格式化數字
format函數用於把數字(numeric)類型轉換成字符類型,formatC函數使用C語言風格來指定輸出的格式,而更通用的C風格的格式化函數是sprintf,第一個參數包含字符串或數字變量的占位符,其他參數逐個對應這些占位符,sprintf函數的占位符:
- %s:字符串
- %f:浮點型
- %d:整數
- %e :科學計數法
格式化函數的定義:
format(x, digits = NULL, nsmall = 0L) formatC(x, digits = NULL, format = NULL, flag = "") sprintf(fmt, ...)
參數注釋:
- digits:是一個建議值,用於設置數字的總位數,包括小數點左邊和右邊;
- nsmall:小數位的數量;
- format:數字的格式,跟占位符相似: "d" (for integers), "f", "e", "E", "g", "G", "fg" (for reals), or "s" (for strings).
- flag:在數字前添加符號
例如,format函數和sprintf函數對數字格式化輸出的結果是:
> format(1.3) [1] "1.3" > sprintf('%f, %d',1.3,1) [1] "1.300000, 1"
八,stringr包
stringr包對字符串操作提供了一致的包裝,使用R操作字符串,基本上使用該包提供的函數就夠了,在使用之前,首先引用stringr包:
library(stringr)
1,字符串長度
str_length 函數計算字符串的長度
> str_length("vic") [1] 3
2,截取子串
str_sub函數用於截取子字符串,start和end用於指定子串的開始位置和結束位置,在end中,如果使用負數,表示從字符串的末尾向前計數。
str_sub(string, start = 1L, end = -1L)
例如,從字符串向量中截取子串:
> x <- c("abcdef", "ghifjk") > str_sub(x, 3, 3) [1] "c" "i" > str_sub(x, 3, -2) [1] "cde" "ifj"
3,字符的序號
獲取字符向量中字符的序號
x <- c("y", "i", "k") str_order(x) #> [1] 2 3 1
4,對字符進行排序
x <- c("y", "i", "k") str_sort(x) #> [1] "i" "k" "y"
5,擴展字符串
str_pad(string, width, side = c("left", "right", "both"), pad = " ")
6,去掉字符串兩端的空格
str_trim(string, side = c("both", "left", "right"))
7,轉換大小寫
str_to_upper(string, locale = "en") str_to_lower(string, locale = "en") str_to_title(string, locale = "en")
8,按照模式匹配
str_detect函數按照指定的模式查找字符串,返回邏輯值;str_subset返回匹配模式的字符串:
str_detect(string, pattern) str_subset(string, pattern) str_which(string, pattern)
9,分割字符串
str_split函數按照指定的模式分割字符串:
str_split(string, pattern, n = Inf, simplify = FALSE)
10,統計匹配模式的數量
str_count函數用於統計字符串中的指定字符的數量:
str_count(string, pattern = "")
11,替換字符
str_replace(string, pattern, replacement) str_replace_all(string, pattern, replacement)
詳細信息,請閱讀stringr包的官方文檔:Introduction to stringr
參考文檔: