天天看點

靈活的字元串處理包:stringr

在文本或非結構資料進行中往往需要正規表達式的強大功能,需要字元串的處理,下文就講講這幾天梳理的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) #提取最後一個單詞

靈活的字元串處理包:stringr

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個字元

靈活的字元串處理包:stringr

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')

靈活的字元串處理包:stringr

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)

靈活的字元串處理包:stringr

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

靈活的字元串處理包:stringr

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)

靈活的字元串處理包:stringr

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")

靈活的字元串處理包:stringr

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, '\\.', '-')

靈活的字元串處理包:stringr

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 = '*')

靈活的字元串處理包:stringr

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}')

靈活的字元串處理包:stringr

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)

靈活的字元串處理包:stringr

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')

靈活的字元串處理包:stringr

一般将定位函數與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)

靈活的字元串處理包:stringr

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),':')

靈活的字元串處理包:stringr

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))

靈活的字元串處理包:stringr

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]')

靈活的字元串處理包:stringr

str_count(),計數能夠比對上的字元個數

str_count(string, pattern = "")

string:需要處理的字元串對象

pattern:指定比對的模式,預設為"",計算每個字元串的長度

string <- c('LiuShunxiang','Zhangsan','Philips1990')

str_count(string,'i')

str_count(string,'\\d')

str_count(string)

靈活的字元串處理包:stringr

下期将給大家介紹資料挖掘包caret。

每天進步一點點2015

學習與分享,取長補短,關注小号!

      長按識别二維碼 馬上關注