
R語言_符串處理和grep的用法
R通常被用來進行數值計算比較多,字符串處理相對較少,而且關于字符串的函數也不多,用得多的就是substr、strsplit、paste、regexpr這幾個了。實際上R關于字符串處理的功能是非常強大的,因為它甚至可以直接使用Perl的正則表達式,這也是R的一個理念,作為語言就把向量計算做到極致,作為環境,就在各領域都集成最好的。R中有grep系列的函數,可以用最強大的方式處理字符串的所有問題。
grep的全稱是global search regular expression and print out the line,是Unix下一種強大的文本搜索工具,可以通過正則表達式搜索文本,并把匹配的行打印出來,包括grep、egrep和fgrep(egrep是擴展的grep,fgrep是快速的搜尋方式并沒有真正利用正則表達式)。Linux下使用GNU版的grep,該套規范也被廣泛地使用,R中的grep函數就是其中之一。
grep的核心就是正則表達式(Regular Expressions,通??s寫為regex),所謂正則表達式,就是用某種模式去匹配一類字符串的一個公式,很多文本編輯器或者程序語言都支持該方式進行字符串的操作,最開始是由上文介紹的Unix工具grep之類普及的,后來得到廣泛應用。尤其是Perl語言中將正則表達式發揮到了極致。
R中的正則表達式非常專業,從grep系列函數的參數就可以看出,有個參數“extended”,默認為T,表示使用擴展grep,也就是egrep,如果選擇為F就表示基礎的grep,不過該種方式不被R推薦,即使使用了也會出現警告,實際上grep能做的egrep也都能做,而且還要簡單不少。我剛開始在egrep中使用總是不能通過,后來發現其實egrep中更簡單,很多時候直接寫在[]內就行。還有一個參數“perl”,默認為F,如果選擇T表示使用Perl的正則表達式規則,功能更加強大,不過如果沒有專門學過Perl語言的話用egrep也就夠了。另一個參數“fixed”雖然描述的不是同一個東西,但是也很相關,選擇之后就會進行精確的匹配,不再使用正則表達式的規則,在效率上會快很多,我覺得這個可能就是fgrep。R的幫助文檔中也明確說明了這三個參數實際上代表了四種模式,常規grep、擴展grep、Perl正則表達式、精確匹配,使用者可以根據具體的含義選擇自己需要的,如果參數設置互有沖突,會自動忽略后面的參數,并會在Warning中明確指出。
grep系列函數其實包括grep、grepl、sub、gsub、regexpr、gregexpr,他們的參數很類似,在R中也是把幫助文檔集成在了一起,查找任意一個都會得到一個統一的文檔。里面對各個參數也是一起介紹的,除了剛才說的三個以外,第一個參數就是最重要的“pattern”,這是一個字符串,直接表示正則表達式,根據模式的不同注意規則就行,另外有個“x”表示要查找的向量,這也是R中的獨特之處,不是查找文件,而是查找向量,該處也可以只輸入一個字符串,就成了基礎的字符串處理函數。對于grep函數,結果只有匹配或者不匹配,因此匹配時輸出向量中該元素的下標,如果是單個字符就輸出1,對于grepl,和grep其實一樣,不過輸出的是邏輯值,匹配就是T,不匹配就是F。參數“value”默認為F,輸出的值就是剛才說的元素下標或者邏輯值,如果改成T,就會輸出查找的字符串。還有一個參數“ignore.case”,默認是F,表示大小寫敏感,可以改為T,表示大小寫不敏感。參數“useBytes”默認是F,表示按字符查找,如果是T則表示按字節查找,對于中文字符影響還是很大的。參數“invert ”默認為F,表示正常的查找,如果為T則查找模式的補集。像sub和gsub這樣的替換函數,還多一個參數“replacement”,用來表示替換的字符。
這些函數的參數都比較類似,但是輸出各不一樣,grep輸出向量的下標,實際上就是找到與沒找到,grepl返回的邏輯值更能說明問題。sub是一個很強大的替換函數,遠勝過substr,正則表達式中可以設置非常靈活的規則,然后返回被替換后的字符串,如果正則表達式寫得好,基本可以解決所有子字符串的問題。sub函數和gsub函數唯一的差別在于前者匹配第一次符合模式的字符串,后者匹配所有符合模式的字符串,也就是說在替換的時候前者只替換第一次符合的,后者替換所有符合的。regexpr和gregexpr被使用的似乎比較多,因為它們很像其他語言中的instr函數,可以查找到某些字符在字符串中出現的位置,不過我覺得用處并不是很大,因為通常情況下尋找某字符位置的目的就是為了做相關處理,而sub都能搞定。regexpr和gregexpr的關系和sub與gsub差不多,gregexpr操作向量時會返回列表。
以上就是grep系列函數的一些用法,根據例子可以很方便地使用,個人建議使用參數“pattern”和“x”就行(sub和gsub當然還有replacement),其他的都用默認的。在pattern中按照egrep的規則寫正則表達式,基本上可以解決所有的字符串處理問題。只需要對正則表達式有簡單的了解,就可以得到R中這些強大的功能。關于正則表達式的用法就在后文中分解了。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25