中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
tidyverse —— stringr包


作者簡介

野菜團(tuán)子,R語言中文社區(qū)專欄作者 

博客:https://ask.hellobi.com/blog/esperanca 


stringr包,顧名思義,處理字符串專用包,本篇筆記對它進(jìn)行簡單介紹。提到字符串處理,有一個(gè)繞不過去的主題,它是字符串處理的利器,也是字符串處理的問題制造機(jī),它就是——正則表達(dá)式。本篇筆記順帶介紹一下正則表達(dá)在R語言中的應(yīng)用。

1.  連接字符串

在base包中,字符串的連接主要用paste和paste0兩個(gè)函數(shù),在stringr包中,它們的替代品是str_c()函數(shù)。舉個(gè)簡單的例子:

str_c('x', 'y','z')str_c('x', 'y', sep =', ')



str_c()繼承R語言函數(shù)的矢量化運(yùn)算風(fēng)格,會(huì)對參數(shù)進(jìn)行循環(huán)計(jì)算,直到更長的那個(gè)參數(shù)的完結(jié):

str_c('', c('a','b', 'c'), '-suffix')



2.  截取子集

要截取字符串中的一段,使用str_sub()函數(shù)。str_sub()函數(shù)接受兩個(gè)數(shù)字參數(shù)作為截取字段起止的位置。不同于Python等其他語言的索引從0開始,R語言從1開始計(jì)數(shù),并且包含截止的位置。舉個(gè)例子:

x <- c('apple','banana',="">

str_sub(x, 1, 3)str_sub(x, -3, -1)



負(fù)數(shù)表示從字符串的右邊開始進(jìn)行截取。


3.  正則表達(dá)式

好了,開始我最喜歡也最頭疼的正則表達(dá)部分。先說通配符“.”,它能夠匹配除了新行外的所有字符,那么如果想要匹配它本身,就需要對它進(jìn)行轉(zhuǎn)義。在其他諸如stata中,我們在之前加上反斜杠“\”表示轉(zhuǎn)義,但是,在R語言中,我們使用字符串的形式來表示匹配模式,而在字符串中“\”本身是有特殊用法的字符,需要對它進(jìn)行轉(zhuǎn)義來表示轉(zhuǎn)義,就需要加兩個(gè)反斜杠。比如下面這個(gè)例子,我們用str_view函數(shù)來顯示匹配結(jié)果:

str_view(c('abc', 'a.c','bef'), 'a\\.c')



如上圖,雙反斜線轉(zhuǎn)義后才能匹配字符串中的“.”。

那么對于反斜線“\”本身呢?我們要怎么匹配它?

大家可能會(huì)覺得,轉(zhuǎn)義要兩個(gè)反斜杠,再加上本身一個(gè),要三個(gè)反斜杠。



真這么簡單我何必特意問出來。

答案是要4個(gè)。

大家在R語言中設(shè)置當(dāng)前路徑的時(shí)候,如果在路徑中使用了反斜杠,就需要寫兩個(gè)“\”,前一個(gè)表示轉(zhuǎn)義,因?yàn)榉葱备鼙旧碓谧址杏刑厥獾暮x,所以轉(zhuǎn)義是必須的。同理,在R語言中,文本中要表示“\”,需要兩個(gè)反斜杠“\\”來表示。而要構(gòu)建一個(gè)正則模式來匹配文本中的這兩個(gè)反斜杠“\\”,首先是這兩個(gè)反斜杠得有,就是兩個(gè),再注意一下,匹配模式本身也是文本,在文本中要表達(dá)一個(gè)反斜杠,就要在之前多加一個(gè),所以在原有的兩個(gè)反斜杠前各加一個(gè)反斜杠,就一共有四個(gè)。就像這樣:

x <- 'a\\b'str_view(x,="">


好啦,除了這一點(diǎn)需要特別點(diǎn)出來,R語言中的正則就和其他Perl啊、Python啊啥的語言一樣,大致沒什么特別的了。接下來介紹相關(guān)的函數(shù)。


4.  探測匹配

4.1 str_detect函數(shù)

str_detect函數(shù)用來探測是否在字符串中匹配到給定的模式,返回布爾值來表示結(jié)果。用words這個(gè)數(shù)據(jù)集,我們來匹配一下以“ac”開頭的單詞:

head(words)head(str_detect(words, '^ac'))



“^”表示只匹配行開頭的部分,與之相對的是“$”,表示只匹配行的結(jié)尾部分。

計(jì)算一下words中以元音字母結(jié)尾的單詞的比例:

mean(str_detect(words, '[aeiou]$'))



中括號“[]”表示匹配其中的任意元素,“[^]”則表示匹配除了中括號里的元素外的所有元素。比如上代碼還可以表示為1減去以輔音字母結(jié)尾的單詞比例:

1 - mean(str_detect(words, '[^aeiou]$'))



4.2 str_count函數(shù)

str_count函數(shù)用來計(jì)數(shù)給定的模式被匹配上了多少次。比如計(jì)算words中每個(gè)單詞中有多少個(gè)元音字母:

head(words)head(str_count(words, '[aeiou]'))



5.  提取匹配

5.1 str_extract函數(shù)

有時(shí)候我們不僅想要知道匹配了多少次,還想知道具體匹配到了什么,這時(shí)候就可以用str_extract函數(shù)。以sentences數(shù)據(jù)為例,我們想要知道含有顏色的句子有哪些,都含有哪些顏色:

color_match <- str_c('red','orange',="" 'yellow',="" 'green',="" 'blue','purple',="" sep='|' )has_color=""><- str_subset(sentences,color_match)matches=""><->



str_extract函數(shù)只提取第一個(gè)匹配值,如果要匹配所有,就用str_extract_all函數(shù)。

more <- sentences[str_count(sentences,color_match)=""> 1]str_extract_all(more, color_match)



返回的結(jié)果是一個(gè)列表,可以用tidyr包的unnest函數(shù)修整成tibble格式的數(shù)據(jù),也可以設(shè)置simplify = TRUE來返回一個(gè)矩陣:str_extract_all(more, color_match, simplify= TRUE)



5.2 str_match函數(shù)

str_match函數(shù)在需要提取多個(gè)匹配值時(shí)非常趁手。比如想要匹配sentences中的名詞,我們假定名詞前都有冠詞the/a/an中的一個(gè),其后跟一個(gè)空格,再跟一個(gè)非空格的元素組,那么我們給出如下的匹配模式:

noun <- '(the|a|an)="" ([^="">

()表示匹配模式組別,“+”表示前一個(gè)匹配值出現(xiàn)超過一次。我們需要提取的有兩個(gè)匹配值,一個(gè)是第一個(gè)括號里的冠詞,一個(gè)是第二個(gè)括號里的名詞。

has_noun <- sentences="" %="">% str_subset(noun)%>% head(10)has_noun %>% str_extract(noun)has_noun %>% str_match(noun)



對比str_extract函數(shù)把兩個(gè)匹配值提取成一個(gè)字符串,str_match把我們要的冠詞和名詞分別列出。str_match也只匹配第一個(gè),如果要提取所有的名詞和冠詞,可以用str_match_all函數(shù)。


6.  替換匹配

str_replace函數(shù)替換匹配到的第一個(gè)模式,str_replace_all則可以替換所有。比如:

x <- c('1="" house',="" '2="" cars',="" '3="" people')str_replace_all(x,="" c('1'='one' ,="" '2'='two' ,="" '3'='three'>



7.  拆分

str_split函數(shù)將字符串向量進(jìn)行拆分,以sentences數(shù)據(jù)為例,按空格進(jìn)行拆分:

sentences %>% head(5) %>% str_split('', simplify = T)



同樣可以進(jìn)行字符串拆分并且可以使用正則表達(dá)式的還有之前講到的tidyr包的separate函數(shù)。


8.  其他模式

在R語言中,使用一個(gè)字符串格式的模式時(shí),是自動(dòng)調(diào)用正則表達(dá)式的。如果想要匹配的內(nèi)容不需要調(diào)用正則就能解決,就可以使用fixed函數(shù),來避免煩人的轉(zhuǎn)義,而且也更省時(shí)。比如,如果要匹配文本中的反斜杠,配合fixed函數(shù)只用兩個(gè)反斜杠就行了:

a <- 'hello\\wor\\ld'writelines(a)str_extract_all(a,="">


而如果要匹配的內(nèi)容非常繁瑣,則可以選擇設(shè)置comments = TRUE,這樣可以在正則模式中添加注釋,比如Hadley的例子:

phone <- regex('\\(?="" #="" optional="" opening="" parens(\\d{3})="" #="" area="" code[)-="" ]?="" #="" optional="" closingparens,="" dash,="" or="" space(\\d{3})="" #="" another="" threenumbers[="" -]?="" #="" optional="" space="" or="" dash(\\d{3})="" #="" three="" more="" numbers',="" comments="">


一個(gè)小tip,fixed和regex函數(shù)都有ignore _case選項(xiàng),設(shè)置為TRUE后可以無視大小寫進(jìn)行匹配。


最后,附上stringr包的cheatsheet下載地址,想要了解更多的盆友們可以看看:

https://github.com/rstudio/cheatsheets/raw/master/strings.pdf

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《數(shù)據(jù)科學(xué)中的R語言》之字符串處理入門---比較全面
R語言stringr包的使用-2
PHP addslashes() 函數(shù)
字符串處理stringr包在微生物生態(tài)的應(yīng)用基礎(chǔ)
stringr-----str_replace_na
Python菜鳥入門:day01
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服