iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 27
0
AI & Data

[Data Science系列]成為哥布林的那件事-非常粗(初)心者系列 第 27

[Data Science系列]利用R語言來管理regular expression之1-grepl , grep or me

還記得我們在人口激增那篇友介紹到了各個不同種族進入村莊時的統計
這次我們來討論另一種的資料處理,正則表達式regular expressions
雖然這並非R語言的專屬,但我們還是可以來探討幾個用法
倘若我們將之前提到各個種族一一將其列出,種族的名稱就是其正則表達式
例如所有的英文字母,數字或是可顯示的字符即是用於匹配其名稱。
因此稍微有了概念後我們可以運用grepl()
設定的模式可以將grepl(pattern = regex, x = string)帶入
透過這個函式我們可以找出其名稱帶有的字母,比如想知道字母中帶有o這個字母

race <- c("Elf", "Goblin", "Harpy", "Hoblin", "Orc")
grepl(pattern = "o", x = race)
[1] FALSE  TRUE FALSE  TRUE FALSE

這邊將會以TRUE或是FALSE的方式來告訴我們
注意到這邊大小寫是有區分的

但當我們只想知道首個字母為o又該如何設定呢?
這時就可以運用到符號來代替
我們這邊再將名稱全部改為小寫的,運用之前學到的tolower()

lower_race <- tolower(race)
lower_race
[1] "elf" "goblin" "harpy" "hoblin" "orc"   
grepl(pattern = "^o", x = lower_race)
[1] FALSE FALSE FALSE FALSE TRUE

我們也可以運用$這個符號來表示我們想要找的尾數為特地的值
假設想找名稱最後為n的,因為我們要找的是在最後,因此$必須放在最後

grepl(pattern = "n$", x = lower_race)
[1] FALSE TRUE FALSE TRUE FALSE

而另一個grepl()的用法則是他的好兄弟grep()
不同之處在於grepl的答案是給出logical,而grep則是以vector的方式
這邊我們就直接用lower_race全小寫的字母來做處理

grep(pattern = "o", x = lower_race)
[1] 2 4 5

可以看到資料將以vector呈現
同樣的當我們使用之前的模式再帶入,得到的答案將會是一樣,只是不同方式呈現

grep(pattern = "^o", x = lower_race)
[1] 5
grep(pattern = "n$", x = lower_race)
[1] 2 4

最後在介紹一下之前提到的which(),我們可以將which帶入grepl

which(grepl(pattern = "n$", x = lower_race))
[1] 2 4

答案也會和grep一樣~~


上一篇
[Data Science系列]利用R語言來做計算-各種簡單函式的用法
下一篇
[Data Science系列]利用R語言來管理regular expression之2-sub, gsub, subway
系列文
[Data Science系列]成為哥布林的那件事-非常粗(初)心者30

尚未有邦友留言

立即登入留言