在文本或非結構資料進行中往往需要正規表達式的強大功能,需要字元串的處理,下文就講講這幾天梳理的stringr包中的函數。該包仍然由偉大的Hadley做貢獻。
word(),從句子中提取詞組(适用于英語環境下的使用)
word(string, start = 1L, end = start, sep = fixed(" "))
string:需要提取的字元串對象
start:整數向量,指定從第幾個單詞開始提取
end:整數向量,指定取到第幾個單詞
sep:指定單詞之間的分隔符,預設為空格
string <- 'I like using R'
word(string, 1, -1) #取出所有的句子
word(string, 1) #提取第一個單詞
word(string, -1) #提取最後一個單詞
word(string, 1, 1:4) #提取最後一個單詞
str_wrap(),将段落劃分為華麗的格式,可設定每行的寬度等。
str_wrap(string, width = 80, indent = 0, exdent = 0)
string:需要被劃分的字元串
width:設定每行的寬度
indent:設定每個段落第一行的縮進格式,預設沒有縮進
exdent:設定每個段落第一行之後所有行的縮進格式,預設沒有縮進
string <- str_c(readLines(con = file.choose(), encoding = 'UTF-8'),collapse = '\n')
str_wrap(string) #預設以80個位元組作為行寬
cat(str_wrap(string), sep = '\n') #以換行符連接配接每個固定長度的句子
cat(str_wrap(string, indent = 4)) #段落第一行空4個字元
str_trim(),剔除字元串多餘的首末空格
str_trim(string, side = c("both", "left", "right"))
string:需要處理的字元串
side:指定剔除空格的位置,both表示剔除首尾兩端空格,left表示剔除字元串首部空格,right表示剔除字元串末尾空格
string <- ' Why is me? I have worded hardly! '
str_trim(string, side = 'left')
str_trim(string, side = 'right')
str_trim(string, side = 'both')
str_to_upper(),str_to_lower(),str_to_title(),字元串轉換
str_to_upper(string, locale = "")
将字元串統統轉換為大寫
str_to_lower(string, locale = "")
将字元串統統轉換為小寫
str_to_title(string, locale = "")
将字元串換為标題格式
string <- 'Simple, consistent wrappers for common string '
str_to_upper(string)
str_to_lower(string)
str_to_title(string)
str_subset(),根據正規表達式比對字元串中的值
str_subset(string, pattern)
string,需要處理的字元向量
pattern,需要比對的字元模式,預設模式可以是正規表達式
該函數與word()函數的差別在于前者提取字元串的子串,後者提取的是單詞,而且str_sub也可以其替換的作用。
string <- "My name is LiuShunxiang, I'm 28."
str_sub(string, 1, 1)
word(string, 1, 1)
str_sub(string, 1, 4)
word(string, 1, 4)
str_sub(string, -1)
word(string, -1)
str_sub(string, -3,-2) <- 26
string
str_split(),字元串分割函數
str_split(string, pattern, n = Inf)
str_split_fixed(string, pattern, n)
string:被分割的字元串向量
pattern:分割符,可以是正規表達式也可以是固定的字元
n:指定傳回分割的個數,需要注意的是,其使用轉移法分割字元串
str_split與str_split_fixed的差別在于前者傳回清單格式,後者傳回矩陣格式
string <- 'myxyznamexyzisxyzliuxyzshunxyzxiang!'
str_split(string, 'xyz')
str_split(string, 'xyz', n = 5) #最後一組就不會被分割
str_split_fixed(string, 'xyz', 6)
str_order(),對字元向量排序
str_order(x, decreasing = FALSE, na_last = TRUE, locale = "", ...)
str_sort(x, decreasing = FALSE, na_last = TRUE, locale = "", ...)
x:需要排序的字元向量
decreasing:排序方式,預設為升序
na_last:是否将缺失值置于末尾,預設為TRUE
str_order和str_sort的差別在于前者傳回排序後的索引(下标),後者傳回排序後的實際值
str_order(letters, locale = "en")
str_sort(letters, locale = "en")
str_replace(),字元串替換函數
str_replace(string, pattern, replacement)
str_replace_all(string, pattern, replacement)
str_replace_na(string, replacement = "NA")
string:需要處理的字元向量
pattern:指定比對模式,
replacement:指定新的字元串用于替換比對的模式
str_replace與str_replace_all的差別在于前者隻替換一次比對的對象,而後者可以替換所有比對的對象
string <-'1989.07.17'
str_replace(string, '\\.', '-')
str_replace_all(string, '\\.', '-')
str_pad(),字元填充函數
str_pad(string, width, side = c("left", "right", "both"), pad = " ")
string:需要被填充的字元串
width:指定被填充後的字元長度
side:指定填充的方向,預設向左填充
pad:指定填充的字元,預設用空格填充
string <- 'LiuShunxiang'
str_pad(string,10) #指定的長度少于string長度時,将隻傳回原string
str_pad(string,20)
str_pad(string,20,side = 'both',pad = '*')
str_match(),str_match_all(),提取比對的字元串
str_match(string, pattern)
str_match_all(string, pattern)
string:需要處理的字元串
pattern:指定比對的模式,一般指定正規表達式
str_match()和str_match_all()差別在于前者隻提取一次滿足條件的比對對象,而後者可以提取所有比對對象
string <- c('139-1234-5678','133,1267,4589','134 6543 7890','178 2345 1111 or 133 7890 1234')
str_match(string,'[1][3-9]{2}[- ,][0-9]{4}[- ,][0-9]{4}')
str_match_all(string,'[1][3-9]{2}[- ,][0-9]{4}[- ,][0-9]{4}')
str_extract(),str_extract_all,提取比對的字元串,功能與str_match(),str_match_all()函數類似
str_extract(string, pattern)
str_extract_all(string, pattern, simplify = FALSE)
string:需要處理的字元串
pattern:指定比對的模式,一般指定正規表達式
simplify:預設傳回值為清單,如果指定為TRUE,則傳回矩陣格式,這樣有助于将結果寫入二維表中
string <- c('139-1234-5678','133,1267,4589','134 6543 7890','178 2345 1111 or 133 7890 1234')
str_extract(string,'[1][3-9]{2}[- ,][0-9]{4}[- ,][0-9]{4}')
str_extract_all(string,'[1][3-9]{2}[- ,][0-9]{4}[- ,][0-9]{4}')
str_extract_all(string,'[1][3-9]{2}[- ,][0-9]{4}[- ,][0-9]{4}',simplify=TRUE)
str_locate(),str_locate_all(),字元定位函數,傳回比對對象的首末位置
str_locate(string, pattern)
str_locate_all(string, pattern)
string:需要處理的字元串
pattern:需要比對的對象,一般為正規表達式
str_locate()和str_locate_all()的差別在于前者隻比對首次,而後者可以比對所有可能的值
string <- c('liushunxiang1989','zhangsan1234')
str_locate(string,'s')
str_locate(string,'n')
str_locate_all(string,'n')
一般将定位函數與str_sub函數搭配使用。
str_length(),字元長度函數,該函數類似于nchar()函數,但前者将NA傳回為NA,而nchar則傳回2
str_length(string)
string:需要計算長度的字元串對象
string <- c('LiuShunxiang','1989-07-17',NA)
str_length(string)
nchar(string)
str_c(),将多個字元串連接配接為單個字元串
str_c(..., sep = "", collapse = NULL)
...:一個或多個字元向量
sep:字元串之間的連接配接符,功能類似于paste()函數
collapse:如果是向量之間的連接配接,collapse的作用與sep一樣,隻不過此時sep無效
str_c(c(1989,07,17), sep = '-') #使用sep
str_c(c(1989,07,17), collapse = '-') #使用collapse
str_c('x',c(1:10),':')
str_dup(),重複字元串
str_dup(string, times)
string:需要重複處理的字元串
times:指定重複的次數
fruit <- c("apple", "pear", "banana")
str_dup(fruit, 2)
str_dup(fruit, 1:3)
str_c("ba", str_dup("na", 0:5))
str_detect(),檢測函數,用于檢測字元串中是否存在某種比對模式
str_detect(string, pattern)
string:檢測的字元串對象
pattern:檢測模式,可以是正規表達式
string <- c('LiuShunxiang','Zhangsan','Philips1990')
str_detect(string,'^L')
str_detect(string,'\\d')
str_detect(string,'[a-zA-Z0-9]')
str_count(),計數能夠比對上的字元個數
str_count(string, pattern = "")
string:需要處理的字元串對象
pattern:指定比對的模式,預設為"",計算每個字元串的長度
string <- c('LiuShunxiang','Zhangsan','Philips1990')
str_count(string,'i')
str_count(string,'\\d')
str_count(string)
下期将給大家介紹資料挖掘包caret。
每天進步一點點2015
學習與分享,取長補短,關注小号!
長按識别二維碼 馬上關注