還記得我們在人口激增那篇友介紹到了各個不同種族進入村莊時的統計
這次我們來討論另一種的資料處理,正則表達式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一樣~~