R學習 第五篇:字符串操作


文本數據存儲在字符向量中,字符向量的每個元素都是字符串,而非單獨的字符。在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

參考文檔:

Introduction to stringr

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM